boost-Timer介绍
来源:互联网 发布:p2p终结者软件下载 编辑:程序博客网 时间:2024/06/15 21:15
同步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调度功能,asio库中的所有io操作都是基于它来执行的。然后创建了一个deadline_timer对象,它有两个参数,一个是io_service对象,另一个是超时时间。
创建了timer后,就可以调用wait函数来阻塞等待至timer超时了,它还有一种可以指定错误码的入参的重载形式,关于错误码后面再介绍。
异步Timer
同步timer虽然简单,但由于其会阻塞,在实际的项目中并不常用,而往往使用的是异步timer:指定一个回调函数,计时器超时后执行回调函数。asio中实现异步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;
}
和同步方式相比,它主要有两点不同:
- 调用的是非阻塞函数async_wait,它的入参是一个回调函数。
- 显式调用io_service.run()函数驱动异步IO调度。
取消Timer
Timer还有一种常用操作是取消Timer,基本方法如下:
- 调用timer的cancel函数取消timer
- timer取消后,回调函数会立即执行,通过err_code可以感知到计时器是否已经被取消
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两个函数更改Timer的超时时间,如下示例就通过它实现一个周期计时器。
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;
}
- boost timer类介绍
- boost timer类介绍
- boost-Timer介绍
- boost timer类介绍收藏
- Boost库中timer库使用介绍
- boost ---- timer
- boost-timer
- boost::timer
- boost.timer
- boost::timer
- boost::timer
- 浅尝boost之timer
- boost当中timer类
- boost. timer库
- Boost库学习----timer
- boost-timer库学习
- 浅尝boost之timer
- boost--timer库
- hrbust 1698/哈理工oj 1698 邂逅数塔【思维+快速打印素数表】
- iOS学习之 - 数据存储
- 大端/小端/宏
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- boost-Timer介绍
- php下的ueditor的简单配置
- Audiophobia uva10048
- android应用程序中对于ANR主线程超时不响应导致强制关闭的解决方案
- vmvare虚拟机 执行mount命令时找不到介质或者mount:no medium found的解决办法
- STL中的set容器
- NSNumber 转 String 时候会发生精度问题
- getDrawable()方法过时 替代
- Xcode7.0.1 / OS X 10.11.1 提交不了 AppStore 的解决方案