gpt4 book ai didi

c++ - Boost.Asio async_send 问题

转载 作者:可可西里 更新时间:2023-11-01 18:41:24 35 4
gpt4 key购买 nike

我将 Boost.Asio 用于我正在编写的服务器应用程序。

async_send 要求调用方保留对正在发送的数据的所有权,直到数据发送成功。这意味着我的代码(如下所示)将失败,而且确实如此,因为 data 将不再是有效对象。

void func()
{
std::vector<unsigned char> data;

// ...
// fill data with stuff
// ...

socket.async_send(boost::asio::buffer(data), handler);
}

所以我的解决方案是做这样的事情:

std::vector<unsigned char> data;

void func()
{
// ...
// fill data with stuff
// ...

socket.async_send(boost::asio::buffer(data), handler)
}

但现在我想知道如果我有多个客户端,是否需要为每个连接创建一个单独的 vector ?

或者我可以使用那个单一的载体吗?如果我能够使用该单一 vector ,如果我覆盖其中的内容,是否会弄乱我发送给所有客户的数据?

最佳答案

一个可能的解决方法是使用 shared_ptr 来保存本地 vector 并更改处理程序的签名以接收 shared_ptr 以便延长data 的生命周期,直到发送完成(感谢 Tim 向我指出这一点):

void handler( boost::shared_ptr<std::vector<char> > data )
{
}

void func()
{
boost::shared_ptr<std::vector<char> > data(new std::vector<char>);
// ...
// fill data with stuff
// ...

socket.async_send(boost::asio::buffer(*data), boost:bind(handler,data));
}

关于c++ - Boost.Asio async_send 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344809/

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