一个关于TIMER的问题(高手请进)(80分)

  • 主题发起人 主题发起人 xdf_hubei
  • 开始时间 开始时间
X

xdf_hubei

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我有一个文本文件:test.txt,内容如下:
08:30:00
08:30:00
08:30:01
09:10:00
22:30:00
22:30:00
22:30:00
可能有上百行内容,都是时间
如何在系统时间到每行描述的时刻执行一个特定的动作如:SHOWMESSAGE?
如:当系统时间为08:30:00时,执行showmessage('shut up!');
 
文件如果不会经常变,直接度到一个list就可以了
然后timer里面,每秒钟检查一次,时间到了就执行时间
 
TheTiem :string//从文本读出的一个时间
在 onTime里写不行吗?
if TimeToStr(now)= TheTime then
dosomething
 
刚开始我是这么做的啊,可是LIST里面的时间有重复的,如果是这样,如果LIST里面的记录多到20个的话,只能出发一次,我希望触发多次
如,有两个:09:30:00,那么只会执行一次动作,也就是说,搜索LIST的时间会超过一秒,
 
是呀
你的这些时间是否固定啊?
如果固定就在程序开始的时候读如到一个TStringList中
然后开一个线程每隔一段时间检查一下现在的时间是否和TStringList中
的相等。
 
将文本导到数据库,随你操作!
 
把文本文件导入数据库中,用access就行了.
怎样导入你查一下以前的贴子就行.
 
timer的时间间隔必须设为一秒,因为时间要求触发的时间精确到了秒。将那些个时间写到一个数据表里面不是问题,但是能保证查询完整个表的时间能在一秒内完成么?能比操作STRINGLIST快么?别忘了STRINGLIST是在内存里面的,操作它尚且需要超过一秒的时间,难道操作数据库比操作内存还快??
我再详细描述一下问题
STRINGLIST内容如下
08:30:00
08:30:00
08:30:00
08:40:00
TIMER1.INTERVAL=1000
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin

for i:=0 to strlst1.count-1 do
begin
if strlst1=timetostr(now) then
showmessage('hehehehe');

end;
end;
程序写成这样时,如果系统时间到08:30:00,我希望他能弹出三个对话框,但是,我得到的结果是,只弹出一次
如何解决??多谢楼上几个兄弟的帮忙,稍后发分!
 
TO :hbezwwl
老大,你没有看见我用的是:for i:=0 to strlst1.count-1 吗?难道这还需要用I:=i+1???
 
你在if ...then ..sowmessage后面加一句 i:=i+1;


//对不起,没看清楚,你单步测试是循环几次,

 
兄弟:你这个程序有问题呀,首先,你可以测试一下,如果在WIN98下把timer的时间定为
1000,在运行一段时间后,会出现误差,也就是说实际上timer无法精确到1000,因为timer
的起触发时间只能是55ms的整数倍。
另外,你这个程序的编写存在问题,用=来判断的话肯定只能触发一次的。
你可以上QQ上找我,我们讨论一下。23555873
 
TRUECAT已经帮我解决这个问题了,多谢各位捧场~!发分了!
 

Similar threads

后退
顶部