首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步ReadDirectoryChangesW()?

异步ReadDirectoryChangesW()?
EN

Stack Overflow用户
提问于 2008-12-04 07:13:22
回答 2查看 3.7K关注 0票数 1

我希望监视指定目录中的修改,并检索确切的更改信息。所以我决定使用ReadDirectoryChangesW()函数。但我希望异步使用它,这意味着如果目录中没有任何更改,我不希望我的工作线程被阻塞。

我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2008-12-04 09:16:46

我倾向于使用带有I/O完成端口的ReadDirectoryChangesW(),当您想要监视多个目录时,这是很好的选择,因为您可以让单个线程为IOCP提供服务,并处理所有对ReadDirectoryChangesW()调用的结果。

首先,通过调用CreateIoCompletionPort()创建一个IOCP。启动一个调用GetQueuedCompletionStatus()并处理异步目录更改的线程。

现在,对于您想要监视的每个目录。首先,像平常一样打开你的目录句柄。接下来,通过调用CreateIoCompletionPort()并传入IOCP句柄将其与您的IOCP关联(更多详细信息,请参阅文档)。最后,调用ReadDirectoryChangesW()并传递文档中详细介绍的OVERLAPPED。调用将返回,如果成功,结果将作为您创建的用于服务IOCP的线程中的GetQueuedCompletionStatus()结果可用。

票数 4
EN

Stack Overflow用户

发布于 2008-12-04 07:33:15

MSDN documentation for ReadDirectoryChnagesW()

对于异步完成,您可以通过以下三种方式之一接收通知:

使用GetOverlappedResult函数的

  • 。要通过GetOverlappedResult接收通知,请不要在lpCompletionRoutine参数中指定完成例程。确保将重叠结构的事件成员设置为唯一的hEvent。
  • 使用GetQueuedCompletionStatus函数。要通过GetQueuedCompletionStatus接收通知,请不要在lpCompletionRoutine中指定完成例程。通过调用function.
  • Using a完成例程,将目录句柄hDirectory与完成端口相关联。要通过完成例程接收通知,请不要将目录与完成端口关联。在lpCompletionRoutine中指定完成例程。当线程处于可警报等待状态时,只要操作已完成或被取消,就会调用此例程。系统不使用重叠结构的hEvent成员,因此您可以自己使用它。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/339776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档