大侠们给点思路 ( 积分: 30 )

  • 主题发起人 主题发起人 willyu
  • 开始时间 开始时间
W

willyu

Unregistered / Unconfirmed
GUEST, unregistred user!
有个程序,希望当有信号来后120秒后开始执行动作,该如何进行更合理,用定时器吗
本人觉得不太合理,因为个人感觉定时器是用于定期执行某个动作的控件,而且像这种信号我有多路(超过20路),用20个定时器不合理
以前未接触过这方面的问题,因此在此望得到大侠们的帮助
谢谢
 
捕捉到信号后sleep(120000)再执行
 
用20个变量,定义结构

type
ttigerrec=packed record
tigered:boolean;
st: cardinal;
end;

tigerrec:array[0..19] of ttigerrec

用一个线程一直检查信号

当收到信号 设置 tigerrec[n].tigered:=True
st:=gettickcount


另一个线程判断时间
for i:=0 to 19 do begin
if tigerrec.tigered then begin
if gettickcount-tigerrec.st>=120*1000 then begin
tigerrec.tigered:=False;
//创建执行动作线程
end;
end;
end;
sleep(2); //释放cpu资源
 
难怪客流量少,谁让你给这点分了呢,呵呵!
帮你顶一下
 
to zzutrain:
用多线程的话涉及到线程的同步啊,该如何解决
我想动态生成timer控件,但又怕生成多了windows不支持
还望请教,谢谢
 
这个一个timer 就可以了做个时间数据队列就可以tlist 数据队列就可以了 然后那数据放进入 用时间判断执行删除数据队里到时间的数据 执行相对的动作就可以了 qq:729974631
 
用自定义数据结构+定时器应该可以实现。
方法是:动态建立一二元数据结构X,X[0]对应于信号句柄,X[1]初始值为120(即设定的定时器时间),然后用Timer控件每一秒执行X[1] := X[1]-1操作,并检查X[1]是否为零,若为零则激活对应消息的动作事件。
 
用一个类就可以了,
再用个LIST维护实例,
 
观察者模式observer
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
S
回复
0
查看
730
SUNSTONE的Delphi笔记
S
后退
顶部