gpt4 book ai didi

c++ - 在其处理程序内部调用时,Asio async_read 阻塞

转载 作者:行者123 更新时间:2023-11-30 03:45:36 24 4
gpt4 key购买 nike

我正在测试我的一些协议(protocol)设计,但无法让连续的 async_read 工作。我的想法是创建一个通用的读取处理程序来输出接收到的数据(测试),然后检查它以执行协议(protocol)定义的操作。

这意味着我正在从这个通用处理程序中调用一个新的 async_read,由于某种原因它会阻塞并且我的处理程序永远不会返回,从而阻止我的程序的进一步执行。

相关代码

void handle_read_server(const asio::error_code&error_code, size_t bytes_transferred, void *adress)
{
// [...]
char HELO[4] = {'H','E','L','O'};
if (*received.data() == *HELO)
{
cout << "[Protocol] got HELO";
got_helo = true;
short code_data;
asio::async_read(socket_server, asio::buffer(&code_data, 2), asio::transfer_all(), std::bind(handle_read_server, placeholders::_1, placeholders::_2, &code_data)); // This read is blocking my program to continue it's execution.
}
}

我在问什么

是什么导致函数在这里阻塞?让 async_read 线程一直运行,将任何接收到的值传递到服务器中的流,我能做些什么吗?

最佳答案

async_* 调用实际上不会阻塞。

通过将局部变量的地址传递到异步操作/完成处理程序,您有未定义的行为。

您必须确保缓冲区的生命周期延长到完成之后。实现这一点的自然方法是使缓冲区成为封闭类的成员。

关于c++ - 在其处理程序内部调用时,Asio async_read 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34695384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com