我希望监视指定目录中的修改,并检索确切的更改信息。所以我决定使用ReadDirectoryChangesW()函数。但我希望异步使用它,这意味着如果目录中没有任何更改,我不希望我的工作线程被阻塞。
我该怎么做呢?
发布于 2008-12-04 09:16:46
我倾向于使用带有I/O完成端口的ReadDirectoryChangesW(),当您想要监视多个目录时,这是很好的选择,因为您可以让单个线程为IOCP提供服务,并处理所有对ReadDirectoryChangesW()调用的结果。
首先,通过调用CreateIoCompletionPort()创建一个IOCP。启动一个调用GetQueuedCompletionStatus()并处理异步目录更改的线程。
现在,对于您想要监视的每个目录。首先,像平常一样打开你的目录句柄。接下来,通过调用CreateIoCompletionPort()并传入IOCP句柄将其与您的IOCP关联(更多详细信息,请参阅文档)。最后,调用ReadDirectoryChangesW()并传递文档中详细介绍的OVERLAPPED。调用将返回,如果成功,结果将作为您创建的用于服务IOCP的线程中的GetQueuedCompletionStatus()结果可用。
发布于 2008-12-04 07:33:15
从MSDN documentation for ReadDirectoryChnagesW()
对于异步完成,您可以通过以下三种方式之一接收通知:
使用GetOverlappedResult函数的
https://stackoverflow.com/questions/339776
复制相似问题