У меня есть простое приложение, которое порождает два потока и назначает одному задачу обработки некоторого файла и сохранения результата в другой, в то время как другой поток получает информацию о своем родительском процессе.
Я использую некоторое руководствосброс событий и функция FindFirstChangeNotification
.Основной поток входит в бесконечный цикл, вызывая WaitForMultipleObjectsEx
.
Вот фрагмент:
while(TRUE){
waitResult = WaitForMultipleObjectsEx(4, eventObjectHandles, FALSE, 5000, FALSE);
switch(waitResult){
case WAIT_OBJECT_0 + 0:
_tprintf(_T("\nThread with ID: %d has finished processing the poem.\n"), threadIds[0]);
_tprintf(_T("Output file path: %s\n"), thread_xyz_param.outputPath);
ResetEvent(eventObjectHandles[0])
break;
case WAIT_OBJECT_0 + 1:
ResetEvent(eventObjectHandles[1]);
break;
case WAIT_OBJECT_0 + 2:
_tprintf(_T("Error in thread with ID: %d!\n"), threadIds[0]);
ResetEvent(eventObjectHandles[2]);
break;
case WAIT_OBJECT_0 + 3:
_tprintf(_T("Error in thread with ID: %d!\n"), threadIds[1]);
ResetEvent(eventObjectHandles[3]);
break;
}
GetExitCodeThread(threadHandles[0], &firstThreadStatus);
GetExitCodeThread(threadHandles[1], &secondThreadStatus);
if((firstThreadStatus != STILL_ACTIVE) && (secondThreadStatus != STILL_ACTIVE)){
break;
}
}
Проблема в том, что функция FindFirstChangeNotification
сигнализирует несколько раз, хотя язаписать в выходной файл только один раз.
Это хорошая идея, чтобы позвонить FindCloseChangeNotification
вместо ResetEvent
?
Заранее спасибо!