在Windows上使用重叠命名pipe道同时读取和写入【JAVA教程】

!
也想出现在这里? 联系我们
信息

在Windows上使用重叠命名pipe道同时读取和写入,第1张

概述在Windows上使用重叠命名pipe道同时读取和写入

我有一个被重叠创build的pipe道句柄。 我需要并行读写数据。 我怎样才能做到这一点?

命名pipe道服务器使用重叠I / O文档页面显示如何读取和写入许多pipe道的示例,但是“它避免了在单个pipe道实例上同时 *** 作”。

什么是正确的方式来做到这一点在windows上的C + +? 我无法提供正确的示例,也无法提供有关该主题的帮助。

当没有数据要读取时,我面对普通Readfile块的主要问题,并最终无法使用Writefile进行写入。 我还没有find任何方法可以告诉我有什么东西要读,不要阻塞。 据我所知,我需要通过OVERLAPPED结构,但不知道如何使用它的情况下并行读取和写入到一个pipe道(不是很多)。

截断内存映射文件

如何在C / C ++中以编程方式读取linux文件权限

Java和windows – 错误:非法转义字符

如何将键盘和鼠标input发送到windowslogin屏幕?

如何closures处理已转换为文件*?

在同步和重叠pipe道I / O中应该可以这样说:

重叠 *** 作使得一个pipe道可以同时读取和写入数据,单个线程可以在多个pipe道手柄上同时执行I / O *** 作。

从运行脚本中检测文件读/写

遇到处理Streamreaderexception的麻烦

read(2)如何与回车进行交互?

为什么在传入无效缓冲区指针时,系统调用read()会被阻塞?

如何在Python程序中处理文件从窗口切换

所有你需要做的是为每个同时 *** 作提供一个不同的OVERLAPPED结构。 在你的情况下,这意味着每个线程都需要自己的OVERLAPPED结构。 由于线程大概运行不同的功能,这应该会自动发生,除非你使用全局变量搞砸了。

请注意,您从该示例开始过于复杂的事情,该示例侧重于使用重叠的I / O,以避免需要多个线程。

相反,假设你正在使用非重叠的I / O来编写这两个函数,但是每当调用Readfile或Writefile时,都要包含一个有效的OVERLAPPED结构和一个事件句柄,并跟进WaitForSingleObject。 有几件事情你应该知道:你必须确保每个线程都创建自己的事件对象,并且你必须处理I / O *** 作立即完成(即返回ERROR_SUCCESS而不是ERROR_IO_PENDING)的情况。 否则,这一切都相当简单。

如果你不能使它工作,显示你的代码。

正如管道文档所说,一个进程写入,另一个进程读取。 如果你想读和写,你将需要两个管道,一个用于“写入另一个进程”,一个用于“从另一个进程读取数据”。

[这不是windows独有的,但是因为你在问windows管道,所以我认为最好给windows文档。 linux / Unix管道是相同的方式 – 它们有两端,一个读端和一个写端)

当然,正如评论所说,windows文档似乎是相当矛盾的(我一次只用过一个方向的windows管道)。

虽然这个例子不能同时读写,但我认为它可以相对容易地改变,所以它可以。

我怀疑(但是因为代码没有发布)问题是在调用Readfile或设置管道本身。 对Readfile的重叠调用是异步的,在检查结果之前,需要等待WaitForMultipleObjects与重叠结构关联的事件。

很明显,如果你同时读写,你需要一个重叠结构来读和一个写,来指示哪一边“完成”。

总结

以上是内存溢出为你收集整理的在Windows上使用重叠命名pipe道同时读取和写入全部内容,希望文章能够帮你解决在Windows上使用重叠命名pipe道同时读取和写入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞176 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容