现有2个过程A和B,A使用Timer控制每隔一定时间T执行一次,执行完成以后再执行B过程,如果B执行时间超过A的时间间隔T,这时Timer执行A的定时到了,程序会怎么处理?有没有其它好的方法去控制?线程吗
解决方案 »
- 如何更改openDialog对话框“打开”按钮的文本,如:将“打开”改为“确定”。
- 问个弱弱的问题
- 招delphi程序员2名,工作地点在沈阳
- 简单问题
- 类型转换的简单问题
- adoquery.sql.add 中的单引号。。问题,如何写!
- 如何得到一个特定文件的图标及大小属性,并把这些值写入listview控件里
- 怎样得到IE的 历史纪录?----就是地址栏下拉列表里面能出现的东西?
- 用delphi5.0写的ISAPIAPP的程序,上传到INTERNET服务器后数据库的访问路径如何设置?
- win2000,关于定时控制(暂时只能给这么多,以后再加分)
- 如下这段代码怎么传递动态参数比较合适?(问题有点长~谢谢)
- 问个简单的问题(急)
//建议判断一下是否在处理中procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FRunning then Exit;
FRunning := True;
try
A;
B;
finally
FRunning := False;
end;
end;
WM_A = WM_User + 1;
WM_B = WM_User + 2;type
TFormDemo = class(TForm)
procedure FormCreate(Sender: TObject);
private
FTickCount: LongInt;
procedure A(var Msg: TMessage); Message WM_A;
procedure B(var Msg: TMessage); Message WM_B;
public
{ Public declarations }
end;var
FormDemo: TFormDemo;implementation{$R *.dfm}{ TFormDemo }procedure TFormDemo.FormCreate(Sender: TObject);
begin
PostMessage(Handle, WM_A, 0, 0);
end;procedure TFormDemo.A(var Msg: TMessage);
begin
FTickCount := GetTickCount;
{ProcessA}
PostMessage(Handle, WM_B, 0, 0);
end;procedure TFormDemo.B(var Msg: TMessage);
var
Interval: Integer;
begin
{ProcessB}
Interval := GetTickCount - FTickCount;
while Interval < 10000 do //假设A的执行间隔为10秒
begin
Interval := GetTickCount - FTickCount;
Application.ProcessMessages;
end;
postMessage(Handle, WM_A, 0, 0);
end;
//////////////////////////////////////////////////
不牵扯到多线程当然可以这样,你这样做还会有问题吗?应该能够解决了!