gpt4 book ai didi

c++ - 异步写入套接字和用户值(boost::asio 问题)

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:23 25 4
gpt4 key购买 nike

我是新手。我需要一个跨平台的低级 C++ 网络 API,所以我选择了 asio。现在,我已经成功连接并写入套接字,但由于我使用的是异步读/写,我需要一种方法来跟踪请求(如果您愿意,可以使用某种 ID)。我查看了文档/引用,发现无法将用户数据传递给我的处理程序,我能想到的唯一选择是创建一个特殊的类作为回调并跟踪它的 id,然后传递它到套接字作为回调。有没有更好的办法?还是最好的方法?

最佳答案

async_xxx 函数是根据完成处理程序的类型模板化的。处理程序不必是普通的“回调”,它可以是任何公开正确的 operator() 签名的东西。

因此你应该能够做这样的事情:

// Warning: Not tested
struct MyReadHandler
{
MyReadHandler(Whatever ContextInformation) : m_Context(ContextInformation){}

void
operator()(const boost::system::error_code& error, std::size_t bytes_transferred)
{
// Use m_Context
// ...
}

Whatever m_Context;
};

boost::asio::async_read(socket, buffer, MyReadHander(the_context));

或者,您也可以将处理程序作为普通函数并将其绑定(bind)到调用站点,如 asio tutorial 中所述。 .上面的示例将是:

void 
HandleRead(
const boost::system::error_code& error,
std::size_t bytes_transferred
Whatever context
)
{
//...
}

boost::asio::async_read(socket, buffer, boost::bind(&HandleRead,
boost::asio::placeholders::error_code,
boost::asio::placeholders::bytes_transferred,
the_context
));

关于c++ - 异步写入套接字和用户值(boost::asio 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118493/

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