如何 每 N 时间 执行一条语句?

amnoone 2011-03-29 06:52:29
我想要程序 每 N 分钟 (1--360分钟范围) 执行一条语句 如 让按钮显示 (显示值先为假)

我的做法是 在启动时 让


暂存时间 = 当前时间
temptime := now

然后 让定时器判断 ( 当前时间 - 暂存时间 ) mod N = 0 执行 显示按钮

(1000毫秒判断一次) (h1*3600 + m1*60 + s1 - h2*3600 - m2*60 -s2 )mod ( hn *3600 + mn*60) = 0

执行 button 显示

可以运行 按钮就显示出来了 ,定时正常。

各位 有什么好方法么?


...全文
142 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhuo 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sz_haitao 的回复:]

引用 3 楼 chenzhuo 的回复:
不会因为系统忙而丢失的,


消息队列总是不完全可靠的,定时器消息又是比较低优先的
真的系统忙的时候,点击消息都会丢失
[/Quote]

sz_haitao: 请问有没有关于"消息队列总是不完全可靠"介绍的相关文献或官方说明文档.

我之前对Timer也疑惑过,看能不能搞清楚它,如果Timer消息会丢失,理论来讲用Timer的程序
应该都有潜在的BUG.
iamduo 2011-03-31
  • 打赏
  • 举报
回复
SetWaitableTimer
查万一的博客。
一如当初 2011-03-30
  • 打赏
  • 举报
回复
其实Timer不精确,时间短看不出来,挂个1,2个小时就有差距了
我建议是在线程里放个while循环,用gettickcount来计算时间
chenzhuo 2011-03-30
  • 打赏
  • 举报
回复
不会因为系统忙而丢失的,
haitao 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 aqtata 的回复:]
其实Timer不精确,时间短看不出来,挂个1,2个小时就有差距了
我建议是在线程里放个while循环,用gettickcount来计算时间
[/Quote]

不管,总时间间隔是多少,楼主的做法最大的误差也就是一个子周期(1秒)

如果在线程里放个while循环,用gettickcount来计算时间,也是要加sleep(xxms)吧?否则cpu负载会很高
而这个xxms也就是最大的误差了
haitao 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chenzhuo 的回复:]
不会因为系统忙而丢失的,
[/Quote]

消息队列总是不完全可靠的,定时器消息又是比较低优先的
真的系统忙的时候,点击消息都会丢失
amnoone 2011-03-30
  • 打赏
  • 举报
回复
请楼上老师详述一下好吗?
haitao 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenzhuo 的回复:]
直接设置Timer多久执行一次就行啦,为什么还要没1秒钟判断一次.

30*60*1000 30分钟执行一次.
[/Quote]

这样,万一定时器事件因为系统忙而丢失,则需要多等30分钟才得到执行
楼主的做法,则只需要多等1秒
chenzhuo 2011-03-29
  • 打赏
  • 举报
回复
直接设置Timer多久执行一次就行啦,为什么还要没1秒钟判断一次.

30*60*1000 30分钟执行一次.

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧