gpt4 book ai didi

c++ - 我的代码是否等同于 Boost.Asio 教程中给出的代码?

转载 作者:行者123 更新时间:2023-11-28 07:23:04 27 4
gpt4 key购买 nike

我正在学习 Boost.Asio,这是我正在谈论的代码: Link to code

我编写的以下代码看起来是一样的并且有效:(用“-lboost_system”和“-std=c++11”编译)

#include<iostream>
#include<boost/asio.hpp>
#include<functional>
#include<boost/date_time/posix_time/posix_time.hpp>

typedef const boost::system::error_code cbse;
int main()
{
boost::asio::io_service io;

boost::asio::deadline_timer t(io,boost::posix_time::seconds(1));

int count=0;

std::function<void(cbse&)>
cb=[&](cbse&)
{
if(count<5)
{
std::cout<<"foo"<<std::endl;
count++;
t.expires_at(t.expires_at()+boost::posix_time::seconds(1));
t.async_wait(cb);
}
else
std::cout<<"done"<<std::endl;
};

t.async_wait(cb);

std::cout<<"Hello"<<std::endl;

io.run();

return 0;
}

我是否遗漏了一些重要的区别?
另外递归调用回调对我来说直觉上似乎不是一个好主意,它在文档中给出只是为了解释吗?

最佳答案

Am I missing some important distinction?

您的代码看起来不错,并且与您链接到的示例代码具有大致相同的行为。唯一真正的区别是您从封闭范围访问 tcount,而不是使用参数。这在像这样的简单示例中是可以的,但对于更复杂的代码可能会引入问题。

Also recursively calling the callback does not seem like a good idea to me intuitively, is it given in the doc just for the sake of explanation?

从回调中再次调用 async_wait 对于获得所需的行为至关重要。否则回调只会被调用一次。

像这样链接异步回调在小心完成时非常有用,但如果不小心,会很快导致代码难以理解/调试。

关于c++ - 我的代码是否等同于 Boost.Asio 教程中给出的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19162879/

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