C++:定时器OnTimer和多线程的使用

本文详细探讨了在程序执行时间过长超过定时器设定时间时,定时器消息发送的不准确性及其原因。同时,分析了KillTimer后定时器仍在执行的现象,并解释了其背后的原因,帮助读者理解定时器的工作机制。

一、程序执行时间过长超过定时器时间

  1. Ontimer在执行时程序没有执行完,占用了主线程,settimer仍然每隔一段时间向消息队列里发送消息,但重复的消息就被去掉只保留一个,待Ontimer程序执行完立刻向Ontimer发送积攒的消息,而另一消息仍按原来时间间隔发送。
  2. Ontimer中的程序不执行完,不会重复发送消息重复执行。因此这个时间间隔是不准的,只有在程序Ontimer占用时间小于定时器时长,才是比较准的。
  3. 箭头表示程序开始执行,蓝色矩形块表示该程序块执行时间。计时器时间线
    二、KillTimer后定时器仍在执行
  • 如果程序执行时间超过了定时器时间,在此期间KillTimer,虽然中断了定时器,但仍有一个消息在队列中,若没有做好屏蔽,消息执行完会继续执行一次(我写的true和step刚好可以执行),因而造成多次执行的现象。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值