FindFirstChangeNotification激发多次

FindFirstChangeNotification激发多次,c,multithreading,winapi,events,wait,C,Multithreading,Winapi,Events,Wait,我有一个简单的应用程序,它生成两个线程,并将处理某个文件并将结果保存到另一个线程的任务分配给一个线程,而另一个线程检索有关其父进程的信息。 我正在使用一些手动重置事件和FindFirstChangeNotification函数。主线程进入一个无限循环,内部调用WaitForMultipleObjectsEx 以下是片段: while(TRUE){ waitResult=WaitForMultipleObjectsEx(4,eventObjectHandles,FALSE,5000,FALSE);

我有一个简单的应用程序,它生成两个线程,并将处理某个文件并将结果保存到另一个线程的任务分配给一个线程,而另一个线程检索有关其父进程的信息。
我正在使用一些手动重置事件和
FindFirstChangeNotification
函数。主线程进入一个无限循环,内部调用
WaitForMultipleObjectsEx

以下是片段:

while(TRUE){
waitResult=WaitForMultipleObjectsEx(4,eventObjectHandles,FALSE,5000,FALSE);
开关(等待结果){
案例等待对象0+0:
_tprintf(_T(“\n线程ID为:%d的线程已完成对诗歌的处理。\n”)、线程ID[0]);
_tprintf(_T(“输出文件路径:%s\n”),thread_xyz_param.outputPath);
ResetEvent(eventObjectHandles[0])
打破
案例等待对象0+1:
ResetEvent(eventObjectHandles[1]);
打破
案例等待对象0+2:
_tprintf(_T(“ID为%d!\n的线程中的错误”),threadid[0]);
ResetEvent(eventObjectHandles[2]);
打破
案例等待对象0+3:
_tprintf(_T(“ID为%d!\n的线程中的错误”),threadid[1]);
ResetEvent(eventObjectHandles[3]);
打破
}
GetExitCodeThread(threadHandles[0],&firstThreadStatus);
GetExitCodeThread(threadHandles[1],&secondThreadStatus);
if((firstThreadStatus!=仍处于活动状态)和&(secondThreadStatus!=仍处于活动状态)){
打破
}
}
问题是
FindFirstChangeNotification
函数多次发送信号,即使我只向输出文件写入一次。
调用
FindCloseChangeNotification
而不是
ResetEvent
是一个好主意吗


提前谢谢

无法将
FindFirstChangeNotification
返回的句柄传递给
ResetEvent
。如果要等待另一个事件,请使用
FindNextChangeNotification
。如果您已完成此操作,请使用
FindCloseChangeNotification


“如果函数成功,返回值是查找更改通知对象的句柄。”它返回查找更改通知对象的句柄,而不是事件。因此,
ResetEvent
的参数无效,
findfirstchangenification
返回的句柄不能传递给
ResetEvent
。如果要等待另一个事件,请使用
FindNextChangeNotification
。如果您已完成此操作,请使用
FindCloseChangeNotification


“如果函数成功,返回值是查找更改通知对象的句柄。”它返回查找更改通知对象的句柄,而不是事件。因此,
ResetEvent

是一个无效的参数。哦,我没有注意到这一点。非常感谢。哦,我没注意到。非常感谢。