Я хочу создать список потоков и изменить количество выполняемых потоков каждый интервал времени (в зависимости от некоторого условия), что невозможно с помощью array of THandle
, потому что, как вы знаете, здесь мне нужно исправить длину массива перед созданием темы, это то, как я продолжу:Как увеличить число запущенных потоков динамически и дождаться их с помощью списка?
procedure MainThread.execute;
var
HandleThread : THandle;
ListOfThreadsH : TList;
begin
ListOfThreadsH := TList.create;
while (condition) do
begin
HandleThread := TMyThread.Create(parameter1,..,parametern).Handle;
ListOfThreadsH.add (HandleThread);
ThreadCount := ThreadCount + 1;
end;
waitForMultipleObjects(ThreadCount, pointer(ListOfThreadsH), True, INFINITE);
end;
Но у меня возникают некоторые проблемы с этим:
Несовместимые типы указателей и кардинальное:
ListOfThreadsH.add (HandleThread);
, я могу понять, почему я m получить это, но не знаю, как его решить.Правильно ли ждать потоков таким образом? Потому что, как я знаю,
ListOfThreadsH
тип должен бытьarray of THandle
. Если нет, как ждать потоков в этом случае?
Если это неправильный способ увеличить количество выполняемых потоков, то как действовать? Спасибо за ваши ответы.
Зачем вам нужно, чтобы зафиксировать длину массива. Вы можете использовать динамический массив. Вы можете использовать общий «TList», чтобы сохранить список объектов потока, если хотите. Вы можете добавить и удалить из этого. Из этого довольно легко создать массив динамиков потоков. Это не имеет ничего общего с потоками. Вы просачиваете память, как сито. –
Вам необходимо проверить возвращаемое значение 'WaitForMultipleObjects', а также не ждать больше, чем' MAXIMUM_WAIT_OBJECTS', что составляет 64 IIRC –