Boost.deadline_timer实现定时器功能时需注意的时区问题

利用boost.deadline_timer() 可以很方便的实现定时器功能,详情参考:http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/deadline_timer.html

比如等待指定的时间数:

		boost::asio::io_service ioservice;
		boost::asio::deadline_timer tm(ioservice, boost::posix_time::seconds(5)); //这里指定的是绝对时间,若指定相对时间可用time_duration指定时间段
		time.wait();

这里也可以用deadline_timer的两个成员函数来指定需等待的时间,deadline_timer.expires_at(指定绝对时间),deadline_timer.expires_from_now(指定相对时间),在等待的时候可选择同步或者异步,time.wait()或者time.async_wait(handler),操作起来比较方便,而且还是跨平台的。

但是在这里有一个问题,比如我在做一个定时升级的工具时,我想指定升级工具的升级时间,比如是2015.4.12 00:00,按照官网上的做法是,(这里指定的是绝对时间)

		boost::asio::io_service ioservice;
		//两种不同的时间格式
		boost::asio::deadline_timer tm(ioservice, boost::posix_time::time_from_string("2015-04-12 23:01:50");
		//boost::asio::deadline_timer tm(ioservice, boost::posix_time::from_iso_string("20150412T230150")); //以T为分隔符
		time.wait();

这么做了后,你会发现程序根本没有等待到你指定的时间才开始相应的任务,而是提前很长一段时间,当时弄了很久尝试了很多方法还是百思不得其解,后来仔细的看了下文档后才发现原来boost中的时间是UTC时间,在程序中应该换成本地时间,所以得换算下时区才行或者用boost中提供的local_time,

		boost::asio::io_service ioservice;
		boost::posix_time::ptime tm(boost::posix_time::time_from_string("2015-04-12 23:01:50"));
		tm -= boost::posix_time::time_duration(8, 0, 0);   //北京时间转换为UTC时间, 相差8个小时
		boost::asio::deadline_timer timer(ioservice, tm);
		timer.wait();
时间: 2024-10-11 00:22:06

Boost.deadline_timer实现定时器功能时需注意的时区问题的相关文章

boost::deadline_timer

定义 typedef basic_deadline_timer<boost::posix_time::ptime> deadline_timer; basic_deadline_timer是个模板类. 构造函数 deadline_timer有三个构造函数: 1 explicit basic_deadline_timer(boost::asio::io_service& io_service) : basic_io_object<TimerService>(io_servic

程序开发使用地图API时需注意的问题(转)

最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图.毕竟Google地图在技术和成熟度上完胜百度地图,当然百度也在慢慢追赶,希望有一天大家都能用上咱们自己的好用的地图服务. 现在把碰到的问题和解决方案罗列一下: 版权:如果是大量商用的话,还是得事先注意一下版权意识,不然到时候就很被动了.两者的免费版都不允许商业应用,具体可以看这里Google Maps API,百度API常

11月第3周业务风控关注 | 下月起互联网平台上线群聊、直播等功能前需安全评估

易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 本周内容安全事件比较集中,故以内容安全特刊形式展现给大家. 1.下月起互联网平台上线群聊.直播等功能前需安全评估 今后,互联网平台新增论坛.微博.公众账号.短视频.直播等功能前需进行安全评估.国家互联网信息办公室今日(11月15日)在官网公布<具有舆论属性或社会动员能力的互联网信息服务安全评估规定>,提出互联网信息服务提供者在上

定时器_在.net core3.0 webapi中添加自定义定时器功能

原文:定时器_在.net core3.0 webapi中添加自定义定时器功能 前言:想在.net framework环境使用自定义定时器的话,参考我的另一篇文章:https://www.cnblogs.com/lxhbky/p/10242839.html 想在.net core中使用定时器功能,需要借助一个服务接口:IHostedService,   继承并实现对应方法,最后再setup.cs类中添加注册服务:services.AddHostedService<实现服务类>();   既然要写

浅谈测试rhel7新功能时的感受及遇到的问题

半夜起来看世界杯,没啥激情,但是又怕错误意大利和英格兰的比赛,就看了rhel7 相关新功能的介绍. 安装还算顺利,安装的界面比以前简洁的多,很清爽,分类很是明确. 有些奇怪的是,我安装的时候,怕有些基础的包没有装上去,所以选定了mini和Web的类型,结果还是有些基础的包没有安装,比如 ifconfig . 虚拟机的网卡,被识别为ens,有意思. yum groupinstall Base 这样的话,就可以把一些基础的包打上.可以正常的时候ifconfig lsof  . 这里需要说明的是,re

Linux # Virtul Box 安装增强功能时, 未能加载虚拟光盘VBoxGuestAdditions.iso

问题: Virtul Box 安装增强功能时, 未能加载虚拟光盘VBoxGuestAdditions.iso 分析:通过分析日志,%vbox_path%\VirtualBox Guest Additions\install_drivers.log发现, 查看安装过程中的信息,如下图,发现缺少 相关dll文件, Linux # Virtul Box 安装增强功能时, 未能加载虚拟光盘VBoxGuestAdditions.iso,布布扣,bubuko.com Linux # Virtul Box 安

virtualbox安装增强功能时【未能加载虚拟光盘】

virtualbox安装增强功能时[未能加载虚拟光盘] 今天在使用Virtualbox中的Ubuntu虚拟机,想安装增强功能来实现更改分辨率,但是在安装时出错:未能加载虚拟光驱 VBoxsGuestAdditions.iso到虚拟电脑 经过折腾,最后通过互联网找到了解决方法: 进入系统在侧边找到如图加载的虚拟光驱,右击,点击弹出,然后就可正常安装增强功能了 点击安装增强功能 点击"运行" 输入登录系统的密码,点击授权,就开始自动安装了 如图,为安装界面,安装完成后按下回车键,就按照成功

电容与EMC-电容不同功能时对整板EMC的作用

一般我们的pcb板的器件有很多种类,但是值得特别关注的,很多人都会说是BGA.接口.IC.晶振之类,因为这些都是layout功能模块以及设计难点.然而数量上占绝对优势的器件却是阻容器件,之前围殴阻抗时,对于电阻已经说了很多了,这次我们从EMC的角度来说说电容.有人肯定要问了:电容的主要作用是旁路.退耦和储能,和EMC有什么关系呢?下面就一一讨论电容不同功能时对整板EMC的作用. 首先来说说旁路电容.我们在原理图中看到很多类似于下面左边的图例,此时电容起什么作用,对于整板的EMC有什么好处呢?众所

浅谈测试rhel7新功能时的感受及遇到的问题【转载】

半夜起来看世界杯,没啥激情,但是又怕错误意大利和英格兰的比赛,就看了rhel7 相关新功能的介绍. rhel7的下载地址: https://access.redhat.com/site/downloads/ 安装还算顺利,安装的界面比以前简洁的多,很清爽,分类很是明确. 有些奇怪的是,我安装的时候,怕有些基础的包没有装上去,所以选定了mini和Web的类型,结果还是有些基础的包没有安装,比如 ifconfig . 虚拟机的网卡,被识别为ens,有意思. yum groupinstall Base