关于循环.(50分)

  • 主题发起人 主题发起人 kenmen
  • 开始时间 开始时间
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
有个程序,我的意图是想记录十条数据,每条的“时间”和“日期”
另外存于其它文件,当按“导入”时,这些数据会存入定义的数组中
(Myarr[num].Str)。我想按“导入”后,这些数据要开始和系统时间作比较。
若相等,就会弹一个信息框出来。(是要循环比较).
这段比较的代码我这样写,我用了TIMER控件。但不能实现,且会出现死循环。
请问该怎改?

procedure Toptiondlg.Timer1Timer(Sender: TObject);
var
cout,m:integer;
begin
cout:=10;
m:=1;
while cout<>0 do
begin
if m<>10 then
begin
for m:=1 to 10 do
if Myarr[m].str=(datetostr(now)+timetostr(now)) then
begin
showmessage('Time Now!');
cout:=cout-1;
end;
end
else
for m:=10 downto 1 do
if Myarr[m].str=(datetostr(now)+timetostr(now)) then
begin
showmessage('Tine Now!');
cout:=cout-1;
end;
end;
 
你这段代码是很容易死循环的,你的MyArr[m].Str 十个值都要等于系统时间的,只要有一个

小于当前时间,这个程序就一定死循环。并且 if m <> 10 then 这名是没有必要的,按你

的程序 m 不可能为 10 的, 因为 for m := 1 to 10 do 这句的结果是 m 为 11,所以

不可能执行 else 语句。
 
那请问该怎办????
能说详细点吗?
 
把你要实现的功能说详细点,具体点
 
一个全局变量i代表当前的数组下标。
导入后:i:=0,timer开始记时。
ontimer事件中:
if Myarr.str=(datetostr(now)+timetostr(now)) then
showmessage('Time Now!');
i:=(i+1) mod 11;
这样时钟每触发一次将对数组中的一个数据进行比较!
 
不好意思,来晚了。。。
其实也很难说详细了。。。
我的主要目的就是要每个时间都要和系统时间作比较。。
当相等时会弹一个信息出来,最好这个相等的时间不再比较。
其它时间继续作比较,以此类推。。
怎样才能避免死循环。。。
 
导入这后做如下操作即可达到你的目的:
for m:=1 to 10 do
if Myarr[m].str=(datetostr(now)+timetostr(now)) then
begin
showmessage('Time Now!');
end;
 
导入这后做如下操作即可达到你的目的:
for m:=1 to 10 do
if Myarr[m].str=(datetostr(now)+timetostr(now)) then
begin
showmessage('Time Now!');
end;
 
如果想在时钟触发时对所有的数据进行比较:
for m:=1 to 10 do
if Myarr[m].str=(datetostr(now)+timetostr(now)) then
begin
myarr[m].str:='';//下次不再使用
showmessage('Time Now!');
end;
如果用时钟的目的只是使它循环比较:
if Myarr.str=(datetostr(now)+timetostr(now)) then
begin
showmessage('Time Now!');
myarr.str:='';
end;
i:=(i+1) mod 11;
 
在循环里加入APPLICATION。PROCESSMESSAGE
 
我有原程序,各位有兴趣的话可到
kenming@he.com.cn找我要。。。
大家一其研究。。。
 
还是你控制循环的条件太多!
 
请问GCQ,,,,
APPLICATION。PROCESSMESSAGE应加在哪?
请各位多多帮忙。。。
我是等用的啊。。。。。
我磕头了。。。
BOBOBOBOBOBOBOB。。。。。

 
在可能出现死循环的地方!
如while true do
begin i:=i+1;
application.processmessage;
end;
这样,你就可以在这个循环执行的时候响应外部的消息了!
 
GCQ.....
那个application.processmessage我用了,但说我未声明。。。
为啥?
 
那个application.processmessage我用了,但说我未声明。。。
为啥?请大家多提保贵意见。。。。。。。。
 
你在导入时可以做一个排序,然后加一个变量记录当前比较到的位置,这样每个OnTimer事件
只需比较最临近的记录即可,你的Timer时间可以根据现在的时间与下一条记录的时间差做一
个定时时间的策略(对每次的延时时间进行修改),。。。后边的自己考虑吧!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
685
SUNSTONE的Delphi笔记
S
S
回复
0
查看
645
SUNSTONE的Delphi笔记
S
后退
顶部