C++ 使用与c++;D';托尔

C++ 使用与c++;D';托尔,c++,windows,winapi,overlapped-io,C++,Windows,Winapi,Overlapped Io,我正在编写一个单客户机(目前)服务器,它有一个主循环,用于插入客户机请求,并分配一个适当的处理程序 对于某些TAK,我希望使用MS重叠I/O(仅适用于windows)。 在其中一个例子中,我想从文件中读取内容并将其写入套接字。 由于我为该操作使用了wrape类,它分配了一个缓冲区,文件的大小,然后调用ReadFile(使用实际的文件系统文件),然后调用WriteFile(这次是一个套接字句柄),两者都重叠 问题是: 由于它是异步的,所以在作业完成之前,会自动调用类d'tor,并释放文件的缓冲区

我正在编写一个单客户机(目前)服务器,它有一个主循环,用于插入客户机请求,并分配一个适当的处理程序

对于某些TAK,我希望使用MS重叠I/O(仅适用于windows)。 在其中一个例子中,我想从文件中读取内容并将其写入套接字。 由于我为该操作使用了wrape类,它分配了一个缓冲区,文件的大小,然后调用ReadFile(使用实际的文件系统文件),然后调用WriteFile(这次是一个套接字句柄),两者都重叠

问题是: 由于它是异步的,所以在作业完成之前,会自动调用类d'tor,并释放文件的缓冲区

很明显,这是我的设计, 我很想听听你的建议


谢谢

查看文档,您似乎希望在设置了
bWait
的情况下调用
GetOverlappedResult
。这将一直阻止,直到重叠操作完成。

查看文档,您似乎希望在设置了
bWait
的情况下调用
GetOverlappedResult
。这将一直阻止,直到重叠操作完成。

您可以在异步函数和析构函数内使用互斥体。

您可以在异步函数和析构函数内使用互斥体。

可以创建一个在后台工作的线程,以验证文件IO是否仍需要完成并保留文件的类处于打开状态(即使它只是一个循环以继续等待)。通过这种方式,套接字可以做它需要做的事情,IO可以不断地(通过在类的成员变量中设置的标志)通知它它的状态


然后在析构函数中,检查它是否已解锁并准备就绪,否则将出现另一个暂停循环。

可以创建一个在后台工作的线程,以验证文件IO是否仍需要完成,并保持文件的类处于打开状态(即使它只是一个继续等待的循环)。通过这种方式,套接字可以做它需要做的事情,IO可以不断地(通过在类的成员变量中设置的标志)通知它它的状态

然后在析构函数中,检查它是否已解锁并准备就绪,否则将出现另一个失速循环。

谢谢大家

看起来我遗漏了一些东西,比如使用另一个线程进行检查,或者只是等待完成,似乎失去了异步IO的优势

我想我要找的是微软计划开发人员使用的使用方法。

谢谢大家

看起来我遗漏了一些东西,比如使用另一个线程进行检查,或者只是等待完成,似乎失去了异步IO的优势


我想我要寻找的是微软计划开发人员使用的使用方法。

你显然需要找到一种方法来暂停析构函数,直到io完成。你显然需要找到一种方法来暂停析构函数,直到io完成。