gpt4 book ai didi

C++:boost::asio:async_resolve() 不起作用(使用 lambda 函数),但 resolve() 起作用

转载 作者:行者123 更新时间:2023-11-30 01:13:27 25 4
gpt4 key购买 nike

基于 this例如,我的程序有这个同步初始化部分:

io_service = new boost::asio::io_service;
resolver = new boost::asio::ip::tcp::resolver(*io_service);
query = new boost::asio::ip::tcp::resolver::query(data.serverAddress.c_str(),data.serverPort.c_str());
iterator = resolver->resolve(*query);
//...

现在这个工作正常没有任何问题,除了如果没有连接,调用 resolver->resolve(*query); 无限阻塞。为了解决这个问题,我决定改用 resolver->async_resolve(*query);。所以我写了下面的代码来和 lambda 函数同步,所以下面的代码替换了之前代码的最后一条语句:

    boost::system::error_code queryError;
boost::function<void(const boost::system::error_code&,const boost::asio::ip::tcp::resolver::iterator&)> queryLambda =
[&querySuccess,&queryError,this]
(const boost::system::error_code& errorCode, const boost::asio::ip::tcp::resolver::iterator& it)
{std::cout<<"Success!"<<std::endl;querySuccess=1;iterator=it;queryError=errorCode;};

resolver->async_resolve(*query,queryLambda);


int timeout = 10000;
int totalTime = 0;
int timeWaitStep = 1000;

while(true)
{
std::cout<<"Trying to connect..."<<std::endl;
sleep(timeWaitStep);
if(querySuccess)
{
break;
}
else
{
totalTime += timeWaitStep;
std::cout<<totalTime<<std::endl;
if(totalTime > timeout)
{
throw std::domain_error("Unable to connect to server. Make sure you have a valid connection.");
}
}
}

虽然同步代码会立即连接,但异步代码永远不会连接。我做错了什么?

感谢您的努力。

最佳答案

您应该在某处run 工作,使用io_service::run 函数,或io_service::poll。顺便说一句,如果你想解决超时,你应该使用deadline_timerasync_wait

关于C++:boost::asio:async_resolve() 不起作用(使用 lambda 函数),但 resolve() 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32010937/

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