如何在c ++中使用boost获取定时器功能?

时间:2016-02-09 13:39:30

标签: c++ multithreading boost timer

我的应用程序是一个多线程应用程序,我在其中创建一个线程,该线程继续读取套接字上的数据以连续检查来自服务器的通知,并且其他线程在每次t(例如20秒)之后向服务器发送请求。 我正在使用boost来做同样的事情。 我读了一下boost :: asio,我发现了一个定时器函数deadline_timer()。但是根据我的理解,它只异步触发一次,但我的要求是每次定时器t到期时连续调用发送。 我该如何实施? 提前谢谢。

2 个答案:

答案 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();
 }

如果有人可以提供更好的方法,请发表评论,我真的很感激。