Emi*_*ier 6 c++ boost coroutine boost-asio c++11
使用Boost.Asio堆栈协程时,如何"手动"生成以便另一个协程或异步操作有机会运行?例如,我需要在对从TCP套接字收到的命令发送响应之前执行长计算:
asio::spawn(strand_, [this, self](asio::yield_context yield)
{
char data[256];
while (socket_.is_open())
{
size_t n = socket_.async_read_some(boost::asio::buffer(data),
yield);
if (startsWith(data, "computePi"))
{
while (!computationFinished)
{
computeSomeMore();
yield; // WHAT SHOULD THIS LINE BE?
}
storeResultIn(data);
boost::asio::async_write(socket_, boost::asio::buffer(data, n),
yield);
}
}
});
Run Code Online (Sandbox Code Playgroud)
从 Boost 1.80 开始,Jamboree 的答案不再有效。对我有用的是:
boost::asio::post(boost::asio::get_associated_executor(yield), yield);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2708 次 |
| 最近记录: |