boost定時器使用
2. 同步Timer
本章介紹asio如何在定時器上進行阻塞等待(blocking wait).實現,我們包含必要的標頭檔案.
所有的asio類可以簡單的通過include "asio.hpp"來呼叫.
- #include <iostream>
- #include <boost/asio.hpp>
-
#include <boost/date_time/posix_time/posix_time.hpp>
- int main()
- {
- boost::asio::io_service io;
-
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
一個deadline_timer只有兩種狀態:到時,未到時.
如果boost::asio::deadline_timer::wait()在到時的timer物件上呼叫,會立即return.
- t.wait();
-
std::cout <<
- return 0;
- }
完整的程式碼:
- #include <iostream>
- #include <boost/asio.hpp>
- #include <boost/date_time/posix_time/posix_time.hpp>
- int main()
- {
- boost::asio::io_service io;
- boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
- t.wait();
- std::cout << "Hello, world! ";
- return 0;
- }
3. 非同步Timer
- #include <iostream>
- #include <asio.hpp>
- #include <boost/date_time/posix_time/posix_time.hpp>
- void print(const asio::error& /*e*/)
- {
- std::cout << "Hello, world! ";
- }
- int main()
- {
- asio::io_service io;
- asio::deadline_timer t(io, boost::posix_time::seconds(5));
- t.async_wait(print);
asio庫只會呼叫那個正在執行的asio::io_service::run()的回撥函式.
如果asio::io_service::run()不被呼叫,那麼回撥永遠不會發生.
asio::io_service::run()會持續工作到點,這裡就是timer到時,回撥完成.
別忘了在呼叫 asio::io_service::run()之前設定好io_service的任務.比如,這裡,如果我們忘記先呼叫asio::deadline_timer::async_wait()則asio::io_service::run()會在瞬間return.
- io.run();
- return 0;
- }
完整的程式碼:
- #include <iostream>
- #include <asio.hpp>
- #include <boost/date_time/posix_time/posix_time.hpp>
- void print(const asio::error& /*e*/)
- {
- std::cout << "Hello, world! ";
- }
- int main()
- {
- asio::io_service io;
- asio::deadline_timer t(io, boost::posix_time::seconds(5));
- t.async_wait(print);
- io.run();
- return 0;
- }
4. 回撥函式的引數
這裡我們將每秒回撥一次,來演示如何回撥函式引數的含義- #include <iostream>
- #include <asio.hpp>
- #include <boost/bind.hpp>
- #include <boost/date_time/posix_time/posix_time.hpp>
- 指向timer的指標
- 一個int*來指向計數器
- void print(const asio::error& /*e*/,
- asio::deadline_timer* t, int* count)
- {
- if (*count < 5)
- {
- std::cout << *count << " ";
- ++(*count);
- ...
(原文:By calculating the new expiry time relative to the old, we can ensure that the timer does not drift away from the whole-second mark due to any delays in processing the handler.)
- t->expires_at(t->expires_at() + boost::posix_time::seconds(1));
在這個例子中, boost::bind的asio::placeholders::error引數是為了給回撥函式傳入一個error物件.當進行一個非同步操作,開始 boost::bind時,你需要使用它來匹配回撥函式的引數表.下一節中你會學到回撥函式不需要error引數時可以省略它.
- t->async_wait(boost::bind(print,
- asio::placeholders::error, t, count));
- }
- }
- int main()
- {
- asio::io_service io;
- int count = 0;
- asio::deadline_timer t(io, boost::posix_time::seconds(1));
- t.async_wait(boost::bind(print,
- asio::placeholders::error, &t, &count));
- io.run();
- std::cout << "Final count is " << count << " ";
- return 0;
- }
完整的程式碼:
-
相關推薦
boost定時器使用
2. 同步Timer 本章介紹asio如何在定時器上進行阻塞等待(blocking wait). 實現,我們包含必要的標頭檔案. 所有的asio類可以簡單的通過include "asio.hpp"來呼叫. #include <
boost 定時器.
先參考這個: 最簡單的使用 #include <iostream> #include <boost/asio.hpp> int main() { boost::asio::io_service
概念理解:boost::asio::定時器2
多執行緒同步回撥#include <cstdio> #include <iostream> #include <boost/asio.hpp> #include <boost/thread.hpp> #include <boost/
Boost中ASIO的一些用法-定時器
一、介紹 ASIO,基於作業系統的非同步機制,可有效避免多執行緒程式設計的諸多副作用。 目前主要關注於通訊方面,使用大量的類封裝了socket,提供更高層次的介面 二、使用不需要編譯,預設不支援SSL,要支援的話需要自己編譯OpenSSL。 三、用法Sample 1、
C++ Boost庫 asio同步/非同步模式[ 定時器來體現 ] 筆記
此文轉自:http://blog.csdn.net/misskissC/article/details/9963515 1.機制分析 asio封裝了作業系統的select、poll/epoll、kqueue、overlapped I/O眾多機制,實現了非同步I/O模
boost asio timer 定時器
前提條件安裝好boost1.68 其他版本的函式可能有變動 main.cpp #include <iostream> #include <boost/asio.hpp> int main() { // 每個程序都至少有一個io_cont
boost::asio名字空間中的deadline_time類:定時器
定時器是asio庫中最簡單的一個IO模型,提供等候時間終止的功能。 定時器功能的主要類是:deadline_timer類,類摘要如下 使用定時器時的標頭檔案: #include <boost/asio.hpp> #include &
用boost的asio+deadline_timer實現一個迴圈定時器
廢話不多說, asio的原理請百度其它博文, 百度上好多deadline_timer的例子都是單次定時, 或者是封裝的很長. 本文寫的是一個超簡單的例子來實現迴圈定時, 注意這個迴圈的週期是可變的, 可以每5秒固定週期執行, 也可以1秒/5秒/2秒變週期執行, 或者指定一個絕
boost.Asio Example定時器的思考---結果阻礙了我們對本質的思考
boost.Asio官網給的教程很多關於定時器的例子,現在我就來研究下這幾個例子 Example 1: // // timer.cpp // ~~~~~~~~~ // // Copyright (c) 2003-2018 Christopher M. Koh
js---08函數 定時器
utf 返回值 right mouseout clear time play nts length <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" con
JS定時器
++ 清除 bsp interval rom 變量 數值 get () js清除定時器的方法 在需要有實時性更新數據的項目中,我們經常會用到很多定時器,我們可能需要一個可以一次性清除所有定時器的方法,並且不通過指定ID一個一個去清除,以下提供兩種解決方案
真是奇怪,js可以,jq卻開啟了多個定時器,誰能解答一下
eve body stop 時鐘 time 就會 set () 方式 timer = setInterval(mar,30); //鼠標移上去清除時鐘 box.onmouseover = function(event){
golang的定時器簡單使用
func new sta tick package 定時 golang rtti fmt ticker.go package main import ( "time" "fmt" ) func main() { StartTimer() } func Start
js精準時間叠代器(定時器)
tof fse 器) val 時間 ext start clas local window.setMyInterval = function(func, interval){ var nexttime = interval; var start
js 定時器用法詳解——setTimeout()、setInterval()、clearTimeout()、clearInterval()
ntb 幫助 .get tint num 用法 -c 函數 tel 在js應用中,定時器的作用就是可以設定當到達一個時間來執行一個函數,或者每隔幾秒重復執行某段函數。這裏面涉及到了三個函數方法:setInterval()、setTimeout()、clearI
定時器/計數器0之定時器
.com 函數調用 wid 延時 mod main images .cn cnblogs /* 效果說明: 定時器中斷:通過單片機計數使程序執行 一秒中斷一次,中斷發生時高四位亮一秒,中斷發生後又回到主程序 */ #include <
定時器與TATE應用
pre reg .cn err 開始 main 定時 .com spa 1 #include <reg51.h> 2 #include <stdio.h> 3 #define uchar unsigned char 4 sbit le
自己定義定時器(Timer)
mil 動態 初始化 span 標誌位 定時器 ace ram run 近期做項目的時候,用到了java.util.Timer定時器類。也初步使用了,個人感覺不錯。只是,在某些方面Timer類無法滿足項目的需求。比方,在使用Timer時,調用schedule()方
MySQL5-函數/存儲過程與定時器、觸發器
名稱 狀態 訪問 safe 安全問題 ant comm gnu led 目錄 一、函數/存儲過程 二、定時器 三、觸發器 四、函數語句學習 一、函數/存儲過程 1、函數與存儲過程 (1) function與procedure的區別:一個有返回值,一個沒有,僅此而已。
定時器quartz工具類
color mem blog ace rtc dfa identity stop names 一、gradle配置 // https://mvnrepository.com/artifact/org.quartz-scheduler/quartz compil