★如何让程序等待?(100分)

  • 主题发起人 主题发起人 volcanosh
  • 开始时间 开始时间
V

volcanosh

Unregistered / Unconfirmed
GUEST, unregistred user!

我的目的是读取某一行脚本(一个纯文本文件)后启动计时器,
每隔一段时间(比如1秒)执行一次,得到需要的结果跳出,否则继续,
超过限定时间后继续读取下一行脚本。我不知该用什么方法来实现。想用timer控件,
但把interval设成1000,如何让程序等待timer不停地重复呢?把interval设成总时间又
无法实现每1秒查询一次。使用GetTickCount()会使程序不再响应外界控制。
想了半天也没想出个方法来,哪位帮帮我?
 
不太明白你的意思,什么叫“让程序等待timer不停地重复”
 
就是说程序不再继续读取下一条脚本,而是等待timer控件执行的结果出来。timer事件可能
一次也可能多次。
 
用两个Timer就可以实现了,顺便要控制好Timer的Enabled属性
 
对呀,用多个timer不就结了,只要不是很多不会有什么问题的。
 
这样的问题还是用个线程比较好一些
 
同意Sleep(I);
 
to resun:
请问多线程如何实现,能否给个例子?

to zxbyh:
sleep后就不再响应键盘,无法达到我的目标
 
在你使用GetTickCount()的时候再加上这一句application.ProcessMessages;
 
给你个线程的例子:

unit ReadThd;

interface

uses Classes;

type
TReadThread = class(TThread)
private
m_buf : array [0..511] of Char;

{ Private declarations }
protected
procedure Execute; override;
procedure ShowData;
end;

implementation

uses Windows,PComm,ExGlobal;

{ TReadThread }
procedure TReadThread.ShowData;
var
lend : LongInt;
begin
(*
When got any data,dump buffer to Edit window.

NOTE:
If any Null character in buffer,
characters after null can't be dumped
to Edit window.
*)

lend := Length(GhForm.Term.Text);

if(lend>25000)then
begin
{ Edit Control buffer size limit }
GhForm.Term.Text := string(m_buf);
Exit;
end;

GhForm.Term.SelStart := lend;
GhForm.Term.SelLength := 0;
GhForm.Term.SelText := string(m_buf);
end;

procedure TReadThread.Execute;
var
len : LongInt;
begin
(* before close port,set GhExit to true to terminate
the read thread *)
while not GhExit do
begin
Sleep(10);
len := sio_read(GCommData.Port,@m_buf,511);
if (len>0) then
begin
m_buf[len] := Char(0);{null terminated string}
Synchronize(ShowData);
end
end;
end;

end.
 
还是用一个Timer,Interval 为检测间隔,并增加一个全局变量作计数器就行啦!
总时间 = 检测间隔 * 计数器值
 
在1s的响应函数中处理,自己加上判断,做什么都成了
 
多人接受答案了。
 
后退
顶部