【发布时间】:2016-01-17 04:39:12
【问题描述】:
我在线程中使用 ReadDirectoryChangesW() 来监视文件更改,并将 CreateFile() 返回的句柄传递给 ReadDirectoryChangesW()。我在 WaitForSingleObject() 中使用相同的句柄来等待目录中的文件更改。我可以在这个 HANDLE 上调用 SetEvent() 来手动退出线程吗?
【问题讨论】:
标签: c winapi visual-c++
我在线程中使用 ReadDirectoryChangesW() 来监视文件更改,并将 CreateFile() 返回的句柄传递给 ReadDirectoryChangesW()。我在 WaitForSingleObject() 中使用相同的句柄来等待目录中的文件更改。我可以在这个 HANDLE 上调用 SetEvent() 来手动退出线程吗?
【问题讨论】:
标签: c winapi visual-c++
文件句柄可用作WaitForSingleObject 调用中的同步对象。这并不意味着您可以在其上使用任何同步对象特定的 API 调用,例如 SetEvent。 SetEvent 的文档在主题上很清楚:
hEvent [in]
事件对象的句柄。 CreateEvent 或 OpenEvent 函数返回此句柄。
终止等待事件的线程的规范解决方案是创建一个额外的事件对象,并在线程内使用WaitForMultipleObjects。当线程需要终止时,您在该事件对象上调用SetEvent。 WaitForMultipleObjects 的返回值报告,通知了哪个同步对象。
【讨论】: