我正在使用from 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()后,定时回调不再起作用。你知道如何克服这个问题吗?
感谢。
答案 0 :(得分:1)
定时回调不再起作用
它只被调用一次吗?
根据代码:
io.run()
阻止主线程print
被调用一次io.run()
取消阻止主线程eng.Loopfunction
被称为它必须如何运作。请注意,deadline_timer
仅被调用一次。如果您希望每秒调用一次计时器,则需要在deadline_timer::async_wait
结束时调用print
,如下所示:
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();