1

我正在编写一个单客户端(目前)服务器,该服务器具有一个主循环,可以中断客户端请求,并分配一个适当的处理程序。

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

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

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

谢谢!

4

4 回答 4

1

查看文档,您似乎想GetOverlappedResultbWait设置时调用。这将阻塞,直到重叠操作完成。

于 2012-10-03T22:03:33.043 回答
0

谢谢大家,

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

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

于 2012-10-04T09:44:04.483 回答
0

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

于 2012-10-03T22:04:47.037 回答
0

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

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

于 2012-10-03T23:24:18.153 回答