簡體   English   中英

使用 boost::asio::deadline_timer 制作計時器

[英]Make a Timer with boost::asio::deadline_timer

我想用 boost::asio::deadline_timer 制作一個 Timer 類。 我研究了這個: 如何讓 boost/asio 庫重復計時器?

    class DeadlineTimer
    {
        boost::asio::io_service io;
        std::function<void()> fun;
        boost::asio::deadline_timer t;
        void runTimer()
        {
            fun();
            t.expires_at(t.expires_at() + boost::posix_time::seconds(2));
            t.async_wait(boost::bind(&DeadlineTimer::runTimer, this));
        }
    public:
        DeadlineTimer() :t(io, boost::posix_time::seconds(2)){}
        void setFunction(std::function<void()> _f)
        {
            fun = _f;
        }
        void run()
        {
            io.run();
        }
    };

    void test()
    {
        DeadlineTimer timer1;
        auto f = []() {
            cout << "hello world\n";
        };
        timer1.setFunction(f);
        timer1.run();
    }

它允許用戶通過timer1.setFunction(f);傳遞一個自定義的定時器函數timer1.setFunction(f); . 然后重復運行它(在當前情況下每2秒一次)。

但它不起作用,根本沒有輸出。

經過一些反復試驗,我設法更新了 David Wyles 的 boost::asio::repeating_timer 類以使用 Boost >= 1.66 - 這巧妙地封裝了重復計時器的功能。 在線https://github.com/mikehaben69/boost ,包括演示源和生成文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM