c++ - 在 C++ 中对 CreateFile 和 ReadFile 的异步调用

标签 c++ windows file winapi

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

DeviceIOControl 读取文件 设置文件指针

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

谢谢

最佳答案

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

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

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

您只需使用其中一个等待函数来挂起线程并等待读取函数调用回调函数即可。

关于c++ - 在 C++ 中对 CreateFile 和 ReadFile 的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9275175/

相关文章:

c++ - 线程在 "in __lll_lock_wait"点卡住了几个线程

c++ - 如何获取打印机设备上下文?

windows - 消息队列在 Win32 中是如何工作的?

c++推导函数指针类型

c++ - 数值解不会像它应该的那样发散。为什么?

c++ - OS X 相当于 OutputDebugString()?

windows - 如何在 Windows 8 Consumer Preview 中使用 TcpClient

python - 如何在python中捕获值错误

java - 在 Java 中读取大型 CSV 文件

linux - 在 Linux 中以编程方式创建的文件变为 NULL