boost 定時器.
阿新 • • 發佈:2019-01-26
先參考這個:
最簡單的使用
#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; }
再來個非同步的:
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; }
上次演示了基本用法,但它只能發生一次.
問題是怎麼定義一個重複發生的定時器(就是隔一定的時間它就會發生一次.)呢,下面的程式碼就是了, 關鍵在於回撥函式中更改了延時不斷的延長定時器
void print(const boost::system::error_code& e, boost::asio::deadline_timer* t) { cout<<"ddd"<<endl; t->expires_at(t->expires_at()+ boost::posix_time::seconds(1)); t->async_wait(boost::bind(print,boost::asio::placeholders::error,t)); } void test1() { boost::asio::io_service io; boost::asio::deadline_timer t(io, boost::posix_time::seconds(1)); t.async_wait(boost::bind(print,boost::asio::placeholders::error,&t)); io.run(); } int _tmain(int argc, _TCHAR* argv[]) { test1(); system("pause"); return 0; }