Допустим, у меня есть три дескриптора потока
HandleList[0] = hThread1;
HandleList[1] = hThread2;
HandleList[2] = hThread3;
/*All the above are of type HANDLE*/
Прежде чем закрыть приложение, я хочу, чтобы поток выполнил свою задачу.Поэтому я хочу заставить приложение ждать, пока поток не завершится.
Итак, я делаю,
WaitForMultipleObjects(3, HandleList, TRUE, INFINITE );
Таким образом, я могу создать поток, выполнить его задачу.Но элемент управления никогда не перемещается на следующую строку после вызова WaitForMultileObjects, независимо от того, завершает ли его задача весь поток.
Если я использую несколько секунд вместо INFINITE, то через несколько секунд он переходит к следующей строке, независимо от того, является ли потокзавершает свою задачу или нет.
WaitForMultipleObjects(3, HandleList, TRUE, 10000 );
Моя проблема здесь в том, что я не могу идти в течение нескольких секунд, так как я не уверен, завершат ли потоки свою задачу за заданное время.
Чтобы перечислить мою проблему простыми словами, я хочу, чтобы все мои темы завершили задачу, прежде чем я закрою свое приложение.Как я могу добиться этого с помощью API WaitForMultipleObjects?
РЕДАКТИРОВАТЬ: Согласно MSDN ..
dwMilliseconds [in] Интервал времени ожидания, вмиллисекунды.
- Функция возвращает значение по истечении интервала, даже если условия, заданные параметром bWaitAll, не выполняются.
- Если dwMilliseconds равен нулю, функция проверяет состояния указанных объектов и немедленно возвращает результат.
- Если значение dwMilliseconds равно БЕСКОНЕЧНО, интервал ожидания функции никогда не истекает .