最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

boost.asio框架系列之定時器Timer

 更新時間:2022年06月18日 15:25:07   作者:天方  
這篇文章介紹了boost.asio框架系列之定時器Timer,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

同步Timer

asio中提供的timer名為deadline_timer,它提供了超時計時的功能。首先以一個最簡單的同步Timer為例來演示如何使用它。

    #include <iostream>
    #include <boost/asio.hpp>

    int main()
    {
        boost::asio::io_service io;
        boost::asio::deadline_timer timer(io, boost::posix_time::seconds(3));
    
        timer.wait();
        std::cout << "Hello, world!\n";

        return 0;
    }

首先常見了一個io_service對象,它提供了IO調(diào)度功能,asio庫中的所有io操作都是基于它來執(zhí)行的。然后創(chuàng)建了一個deadline_timer對象,它有兩個參數(shù),一個是io_service對象,另一個是超時時間。

創(chuàng)建了timer后,就可以調(diào)用wait函數(shù)來阻塞等待至timer超時了,它還有一種可以指定錯誤碼的入?yún)⒌闹剌d形式,關(guān)于錯誤碼后面再介紹。

異步Timer

同步timer雖然簡單,但由于其會阻塞,在實際的項目中并不常用,而往往使用的是異步timer:指定一個回調(diào)函數(shù),計時器超時后執(zhí)行回調(diào)函數(shù)。asio中實現(xiàn)異步timer比較簡單,示例如下:

    void print(const boost::system::error_code& /*e*/)
    {
        std::cout << "Hello, world!\n";
    }
    int main()
    {
        boost::asio::io_service io;
        boost::asio::deadline_timer timer(io, boost::posix_time::seconds(5));

        timer.async_wait(&print);
        io.run();

        return 0;
    }

和同步方式相比,它主要有兩點不同:

  • 調(diào)用的是非阻塞函數(shù)async_wait,它的入?yún)⑹且粋€回調(diào)函數(shù)。

  • 顯式調(diào)用io_service.run()函數(shù)驅(qū)動異步IO調(diào)度。

取消Timer

Timer還有一種常用操作是取消Timer,基本方法如下:

  • 調(diào)用timer的cancel函數(shù)取消timer

  • timer取消后,回調(diào)函數(shù)會立即執(zhí)行,通過err_code可以感知到計時器是否已經(jīng)被取消

    void print(const boost::system::error_code& err)
    {
        if(err)
        {
            std::cout << "timer is canceled\n";
            return;
        }

        std::cout << "Hello, world!\n";
    }

    int main()
    {
        boost::asio::io_service io;

        boost::asio::deadline_timer timer(io, boost::posix_time::seconds(5));
        timer.async_wait(&print);

        boost::asio::deadline_timer timer2(io, boost::posix_time::seconds(2));
        timer2.wait();
        timer.cancel();

        io.run();
        return 0;
    }

更改Timer超時時間 

可以通過expires_from_now和expires_at兩個函數(shù)更改Timer的超時時間,如下示例就通過它實現(xiàn)一個周期計時器。

    typedef std::function<void (const boost::system::error_code&)> timer_callback ;
    void print(const boost::system::error_code&)
    {
        std::cout << "Hello, world!\n";
    }

    int main()
    {
        boost::asio::io_service io;
        boost::asio::deadline_timer timer(io, boost::posix_time::seconds(1));

        timer_callback callback = [&](const boost::system::error_code& err) 
        {
            print(err);
            timer.expires_at(timer.expires_at() + boost::posix_time::seconds(1));
            timer.async_wait(callback);
        };

        timer.async_wait(callback);
        io.run();
        return 0;
    }

到此這篇關(guān)于boost.asio框架系列之定時器Timer的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++常用字符串分割方法實例匯總

    C++常用字符串分割方法實例匯總

    這篇文章主要介紹了C++常用字符串分割方法實例匯總,包括了strtok函數(shù)、STL、Boost等常用的各類字符串分割方法,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • c++中堆棧及創(chuàng)建對象示例代碼

    c++中堆棧及創(chuàng)建對象示例代碼

    這篇文章主要給大家詳細(xì)介紹了c++如何實現(xiàn)堆棧及創(chuàng)建對象,文中先進行了簡單的介紹,而后給出了詳細(xì)的示例代碼及注釋,相信對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12
  • 完全掌握C++編程中構(gòu)造函數(shù)使用的超級學(xué)習(xí)教程

    完全掌握C++編程中構(gòu)造函數(shù)使用的超級學(xué)習(xí)教程

    這篇文章主要介紹了C++中的構(gòu)造函數(shù),包括C++11標(biāo)準(zhǔn)中的新特性的介紹,十分推薦!需要的朋友可以參考下
    2016-01-01
  • C++11中的原子量和內(nèi)存序詳解

    C++11中的原子量和內(nèi)存序詳解

    這篇文章主要給大家介紹了關(guān)于C++11中原子量和內(nèi)存序的相關(guān)資料,文中通過示例代碼介紹地方非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • C語言實現(xiàn)通訊錄的示例代碼

    C語言實現(xiàn)通訊錄的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何錄音C語言實現(xiàn)一個簡單的通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-10-10
  • C語言實現(xiàn)三子棋小游戲全程詳解

    C語言實現(xiàn)三子棋小游戲全程詳解

    完成一個三子棋的代碼并不是很難,有困難且重要的是完成這個游戲代碼所具備的思想,因為思想上的進步才是真正的進步,當(dāng)我們有了這個思想上的武器,寫出別的代碼,難度就不會高
    2022-05-05
  • C++實現(xiàn)有向圖的鄰接表表示

    C++實現(xiàn)有向圖的鄰接表表示

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)有向圖的鄰接表表示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 使用C++實現(xiàn)迷宮游戲

    使用C++實現(xiàn)迷宮游戲

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)迷宮游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Opencv2.4.9函數(shù)HoughLinesP分析

    Opencv2.4.9函數(shù)HoughLinesP分析

    這篇文章主要為大家詳細(xì)介紹了Opencv2.4.9函數(shù)HoughLinesP,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • c++實現(xiàn)的常見緩存算法和LRU

    c++實現(xiàn)的常見緩存算法和LRU

    LRU緩存算法也叫LRU頁面置換算法,是一種經(jīng)典常用的頁面置換算法,下面這篇文章主要介紹了c++實現(xiàn)的常見緩存算法和LRU,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01

最新評論

水城县| 镇原县| 沙湾县| 武汉市| 常宁市| 鹤峰县| 武宁县| 慈利县| 浦北县| 昭平县| 诸暨市| 安吉县| 台北县| 白银市| 布拖县| 剑河县| 淄博市| 彭阳县| 平原县| 玉门市| 华坪县| 金湖县| 安龙县| 仙居县| 江津市| 兴和县| 珠海市| 达日县| 和龙市| 荔波县| 门源| 昭平县| 万荣县| 石城县| 商南县| 武强县| 淮北市| 鹰潭市| 团风县| 福贡县| 沁水县|