使用与c ++ D'tor重叠的I / O冲突

时间:2012-10-03 21:47:21

标签: c++ windows winapi overlapped-io

我正在编写一个单客户端(现在)服务器,它有一个主循环,用于客户端请求,并调度一个合适的处理程序。

对于某些节目,我想使用MS重叠I / O(仅适用于Windows)。 在其中一个中,我想从一个文件中读取并将内容写入套接字。 因为我有动作的类wrape,它分配一个缓冲区,文件大小,然后调用ReadFile(带有一个实际的文件系统文件),然后是WriteFile(这次是一个套接字句柄)两个都是重叠的。

问题是: 因为它是async',所以在执行作业之前,会自动调用class d'tor,并释放文件的缓冲区,

显然,这是我的一个破碎的设计, 我真的很想听听你的建议,

谢谢!

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

可以创建一个在后台运行的线程来验证文件IO是否仍然需要完成并保持文件的类打开(即使它只是一个循环来继续等待)。这样套接字就可以做它需要的东西,并且IO可以不断地(通过你在类的成员变量中设置的标志)来让它知道它的状态。

然后在析构函数中,检查它是否已解锁并准备好,否则另一个停止循环。

答案 3 :(得分:0)

谢谢大家,

它看起来像我错过了一些东西,因为使用另一个线程进行检查,或者只是等待完成,似乎失去了异步IO的优点。

我想我正在寻找的是MS计划开发人员使用的使用方法。