我的应用程序是一个多线程应用程序,我在其中创建一个线程,该线程继续读取套接字上的数据以连续检查来自服务器的通知,并且其他线程在每次t(例如20秒)之后向服务器发送请求。 我正在使用boost来做同样的事情。 我读了一下boost :: asio,我发现了一个定时器函数deadline_timer()。但是根据我的理解,它只异步触发一次,但我的要求是每次定时器t到期时连续调用发送。 我该如何实施? 提前谢谢。
答案 0 :(得分:1)
你可以从它的处理程序中再次启动计时器:
#include <iostream>
#include <boost/asio.hpp>
using namespace std;
int stop_after = 3;
void async_wait_timer(boost::asio::deadline_timer& t, int seconds)
{
t.expires_from_now(boost::posix_time::seconds{1});
t.async_wait(
[&] (const boost::system::error_code& e)
{
--stop_after;
if(!e || !stop_after)
{
async_wait_timer(t, seconds);
}
});
}
int main()
{
boost::asio::io_service svc;
boost::asio::deadline_timer timer{svc};
async_wait_timer(timer, 1);
svc.run();
return 0;
}
答案 1 :(得分:0)
通过在其中放置一个带deadline_timer的连续循环来解决需求,直到我的系统关闭。
while(!shutdown==true)
{
boost::asio::io_service io;
boost::asio::deadline_timer timer(io, boost::posix_time::seconds(10)); timer.async_wait(&check_faults);
io.run();
}
如果有人可以提供更好的方法,请发表评论,我真的很感激。