c ++在Async_receive处理程序中增强asio同步写入

时间:2011-12-07 05:10:34

标签: c++ asynchronous boost-asio

最初,我问 - 是否可以在socket的async_receive()处理程序中执行boost :: asio :: write()?这发生在单个线程中的单个io_service上。我有一些编写的代码来执行此操作,我认为它挂在write()调用上。但我忘记按下游戏上的播放按钮(这是一个小客户端 - 服务器游戏)!但是这与我对提升asio的理解不太一致,所以我会提出这个问题,但是问,为什么这有用呢?

起初,我认为这是无法完成的,因为线程无法处理write()调用,因为io_service已经忙于这个asynch_receive()作业。我以为我需要另一个执行io_service.run()的线程,可以处理write()。显然,事实并非如此。

我记得,一个线程只会一次一个地在io_service中执行作业。如果是这种情况,并且我的应用程序正在运行,则必须是一旦您开始执行异步处理程序,您的作业就已经移出队列。正确?

1 个答案:

答案 0 :(得分:0)

考虑Boost使用特定于操作系统的API调用的基础I / O操作:套接字,串行通信或任何其他操作。没有任何东西阻止我们从接收数据的同一线程调用send或WriteFile API。我能想到的唯一副作用是当发送操作挂起很长时间,阻塞接收器线程。但这只有在整个通信渠道停止工作时才会发生,所以这并不重要。