首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么异步使用ReadDirectoryChangesW?

为什么异步使用ReadDirectoryChangesW?
EN

Stack Overflow用户
提问于 2009-07-14 17:21:49
回答 3查看 2K关注 0票数 5

我已经阅读了ReadDirectoryChangesW()的文档,也看到了CDirectoryChangeWatcher project,但都没有说明为什么要异步调用它。我知道当前线程不会阻塞,但是至少对于使用完成端口的CDirectoryChangeWatcher代码来说,当它调用GetQueuedCompletionStatus()时,线程无论如何都会阻塞(如果没有更改的话)。

所以,如果我首先在一个单独的线程中同步调用ReadDirectoryChangesW(),而不关心它是否阻塞,那么我为什么要异步调用ReadDirectoryChangesW()呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-14 18:02:53

当您异步调用它时,您可以更多地控制哪个线程进行等待。它还允许您让单个线程等待多个内容,例如目录更改、事件和消息。最后,即使您在同一线程中等待,而该线程首先设置了手表,它也可以让您控制您愿意等待多长时间。GetQueuedCompletionStatus有一个ReadDirectoryChangesW本身不提供的超时值参数。

票数 6
EN

Stack Overflow用户

发布于 2009-07-14 17:31:51

您将调用ReadDirectoryChangesW,以便在需要调用线程不阻塞时异步返回其结果。一种重言式,但事实。

这些线程的候选对象: UI线程&任何单独负责服务多个资源的线程(Socket、任何类型的IPC、独立文件等)。

由于不熟悉这个项目,我想CDirectoryChangeWatcher并不关心它的工作线程是否阻塞。一般来说,这就是工作线程的本质。

票数 1
EN

Stack Overflow用户

发布于 2010-01-30 20:58:19

我尝试在工作线程中同步使用ReadDirectoryChanges,并且猜怎么着,它被阻塞了,这样线程就不会在程序退出时自行退出。因此,如果您不想使用像TerminateThread这样的坏东西,那么应该使用异步调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1126799

复制
相关文章

相似问题

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