【问题标题】:Async calls to CreateFile and ReadFile in c++在 C++ 中对 CreateFile 和 ReadFile 的异步调用
【发布时间】:2012-03-05 17:16:40
【问题描述】:

在我的 c++ windows 应用程序中,我使用 CreateFile 函数来访问文件。我还使用以下函数来控制我的文件:

DeviceIOControl ReadFile SetFilePointer

因为我希望我的应用程序同时访问文件中的许多位置(从我到达我的应用程序的请求)我希望我的应用程序是异步的。我看到有一个名为FILE_FLAG_OVERLAPPED 的标志,但我不知道如何使用它以及何时知道它何时完成操作。 有没有我必须注册的回调? 如果您可以在这里复制一个示例,那将会很有帮助

谢谢

【问题讨论】:

标签: c++ windows file winapi


【解决方案1】:

您是否阅读过此MSDN page on Synchronization and Overlapped Input and Output,它描述了它的工作原理并链接到Named Pipe Server Using Overlapped I/O sample

【讨论】:

    【解决方案2】:

    您可以只生成一个新线程并从第二个线程同步调用 ReadFie()。您需要使用同步对象(例如事件或临界区)来同步两个线程。

    如果您坚持使用单线程异步方法,则调用 ReadFile() 或 ReadFileEx() 并传递一个 OVERLAPPED 结构。该结构将提供一个回调函数,一旦文件读取完成,就会调用该回调函数。

    但是,要调用回调函数,调用线程(调用 ReadFile() 或 ReadFileEx() 的线程)必须位于 alertable state 中。

    您只需使用其中一个等待函数来暂停线程并等待读取函数调用回调函数。

    【讨论】:

    • 或者只使用 I/O 完成端口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2015-08-19
    • 1970-01-01
    • 2021-04-16
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多