Я новичок здесь, и я надеюсь, что все делаю правильно.Какой поток заканчивается многопоточным?
Мне было интересно узнать, какой поток заканчивается после того, как он закончил работу с помощью команды WaitForMultipleObjects. В настоящее время у меня есть что-то вроде:
int checknum;
int loop = 0;
const int NumThreads = 3;
HANDLE threads[NumThreads];
WaitForMultipleObjects(NumThreads, threads, false, INFINITE);
threads[loop] = CreateThread(0, 0, ThreadFunction, &checknum, 0, 0);
Предполагается, что в нем должно быть одновременно не более трех потоков. Поэтому у меня есть цикл, чтобы начать все три потока (отсюда значение цикла). Проблема в том, что, когда я перехожу к ней снова, я хотел бы изменить значение цикла на значение того, что поток только что завершил свою задачу, чтобы его можно было использовать снова. Есть ли способ узнать, какой поток в этом массиве закончен?
Я бы вложил остальную часть своего кода, но я уверен, что никто не нуждается во всех 147 строках. Я решил, что этого фрагмента будет достаточно.
Мне понадобился только один поток, чтобы очистить его, прежде чем я смогу его повторно использовать. Как преобразовать WAIT_OBJECT в 0, 1 или 2, чтобы я мог просто сделать значение цикла равным этому, чтобы циклы могли продолжаться. Или есть способ проверить, свободен ли один из трех потоков и взять первый доступный? – Virlym
Вы можете просто сказать 'int index = WaitForMultipleObjects (NumThreads, threads, false, INFINITE) - WAIT_OBJECT_0', но вам также следует проверить другие ошибки, указанные возвращаемым значением. –
спасибо. Мне просто нужен способ узнать, какой поток был закончен, чтобы я мог его повторно использовать. Я делаю проверку ошибок до начала потока, поскольку поток - просто простая проверка числа. – Virlym