gpt4 book ai didi

C++:定时回调后的WHILE循环会阻止回调吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:02 25 4
gpt4 key购买 nike

我正在使用来自 boost 的建议解决方案进行定时回调,可以找到 here .我正在使用它与其他方法并行运行定时回调。但是当我在设置回调后执行循环时,回调停止:

//this is the main cpp file

void print(const boost::system::error_code& /*e*/)
{
std::cout << "Hello, world!\n";
}

int main(int argc, char** argv)
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(1));
t.async_wait(print);
io.run();

....some part later I then call a function with while(){} loop inside....
eng.Loopfunction();

调用 Loopfunction() 后,定时回调不再起作用。你知道如何克服这个问题吗?

谢谢。

最佳答案

the timed callback doesn't work anymore

是否只调用一次?

根据代码:

  1. io.run() 阻塞主线程
  2. print 被调用一次
  3. io.run() 解锁主线程
  4. eng.Loopfunction 被调用

它必须如何工作。请注意,deadline_timer 只被调用一次。如果您希望每秒调用一次计时器,则需要在 print 的末尾调用 deadline_timer::async_wait,如下所示:

boost::asio::io_service io;
deadline_timer t(io);

void print(const boost::system::error_code& /*e*/)
{
std::cout << "Hello, world!\n";

// call this function again in 1 second
t.expires_from_now( boost::posix_time::seconds(1) );
t.async_wait(print);
}

int main(int argc, char** argv)
{
t.expires_from_now( boost::posix_time::seconds(1) );
t.async_wait(print);
io.run();

关于C++:定时回调后的WHILE循环会阻止回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19807871/

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