DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: hongsir2078
今日帖子: 15
在线用户: 12
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 uctao (uc) ▲△△△△ -
注册会员
2019/1/3 9:43:11
标题:
关于定时器的问题,希望各位大神能给点意见! 浏览:488
加入我的收藏
楼主: 最近在做个小软件,要用到大量的定时器的功能,用途是:倒计时执行某一个任务,比如我的软件要用到大概十几项或者几十项的定时执行任务,每一项定时任务都设置好时间执行,然后开始倒计时,这样的话就要一个每秒计时器了,想这样大量用计数器的话,有什么好的办法实现?尽量减少占CPU,不影响主线程的消息机制,也就是不影响软件各窗体的消息堵塞,避免出现假死。
Delphi自带的控件TTimer肯定是排除掉的了。现在想到的是用多线程来实现定时器是最好的,但是不知道怎么做,望大神们指点下,谢谢
----------------------------------------------
老菜鸟也会飞
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2019/1/3 9:48:16
1楼: 十几项或者几十项就把TTimer排除掉了?我听到的说法是,windows下上万个定时器(至少好几千)才会撑不住。需要注意到是,几十个定时器肯定不会有问题,但是定时器是怎么执行你的内容的?如果耗时长的内容,应该开启线程去工作,避免你的工作内容卡死主线程。

其实你这个问题太简单了,写个for语句,生成从100到1000到5000个定时器,看Windows能撑到什么时候。
----------------------------------------------
只有偏执狂才能生存!
作者:
男 luckyrandom (luckyrandom) ★☆☆☆☆ -
普通会员
2019/1/3 10:16:44
2楼: 目前三百多个定时器表示正常
----------------------------------------------
SQL SERVER大型网站/ERP性能优化、方案设计
QQ:315054403 缘在上海 曾经的Delphier
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2019/1/3 10:33:32
3楼: 1,QDAC 中有个 QWorker,谁用谁知道

使用 QWorker 做为计划任务引擎
http://blog.qdac.cc/?p=2794

2,不用定时器,定义好需要执行的任务列表,用一个线程循环检查时间,到就执行。。。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 joman (joman) ▲▲▲△△ -
注册会员
2019/1/3 11:26:17
4楼: 我只能想到使用线程或线程池来处理
----------------------------------------------
DelphiWebMVC官网 http://www.delphiwebmvc.com
作者:
男 gmxyb (gmxyb) ▲▲▲▲△ -
注册会员
2019/1/3 11:41:33
4楼: TTimer的本质都是时间到了,让程序收到了一个 WM_TIMER 消息,然后触发 OnTimer 事件,如果你在OnTimer中占用了大量的时间,就没法继续处理 WM_TIMER消息了。

所以重点是,要保证任务处理的独立性,哪怕只用一个1秒的定时器都可以,定时器唯一的任务就是每秒检查当前时间,某个时间一到,就启动一个独立的线程(或进程)去执行任务,注意不要去等待线程或进程,这样就不会影响定时器继续检查时间了。当然,如果任务不能重入,那需要用其他的手段实现。
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ▲▲▲▲▲ -
普通会员
2019/1/3 12:16:57
5楼: 楼上说的很有道理。
TTimer的本质是消息。
如果TTimer在一个周期内,不能执行完成你所要执行的代码,只有另找它法。
1:暂停定时器
2:将来的消息加入到任务队列。再开一个线程执行这个队列的任务。执行完一个删一个。值得队列为空。线程循环检测。
----------------------------------------------
Delphi7爱好者
作者:
男 janker (janker) ★☆☆☆☆ -
盒子活跃会员
2019/1/3 17:29:27
6楼: 一个工控控件里有个计时器线程池(数组),可以参考下,叫什么忘了
----------------------------------------------
-
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/1/4 19:01:46
7楼: 把你所有任务的执行时间进行计算,只用一个定时间进行检查,
时间到达后更新当前任务下次执行时间,然后创建任务线程。
----------------------------------------------
简单做人,认真做事。
作者:
男 laimama_1 (苞谷) ★☆☆☆☆ -
盒子活跃会员
2019/1/6 17:48:13
8楼: 强烈推荐QDAC中的QWorker,谁用谁知道!!!绝对是中国人搞出来的精品!!
----------------------------------------------
真实福利,每天不用手动操作就能赚50-80元不等:http://www.212cc.com/tuiqi/h_goto.php?u=cqlaima
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2019/1/9 0:34:14
9楼: 要那么多定时器干什么,CPU也没那么多定时器给你,
都是软件模拟的,不如自己来,用一个定时器就够了,
用一组整数去计时,那个时间到了,就创建线程并行
执行任务。或者时间到了,设置一个标志,用一个线程
循环检查标志,顺序执行任务。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行39.0625毫秒 RSS