如何在一事件后延迟2分钟再发生另一事件?(100分)

  • 主题发起人 主题发起人 grade
  • 开始时间 开始时间
G

grade

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在一事件后延迟2分钟再发生另一事件?(前提:程序不能没有响应)
 
用“WaitForSingleObject”搜一下已答问题。
 
好,我去看看
 
可以先自定义一个过程呵
在这个过程里看时间是不是已经过了两分钟了
可以用两个系统时间值来比较
在这里不可以用TTimer,因为其最长只可以设置为65600毫秒的

1)如果第一个事件是自己触发的,可以在事件的后面触发自定义过程
2)如果是别的东东触发的。可以用消息来拦截并进行触发。
 
是自己触发的,可是这总方法我试过,好像不太精确
 
应该够了吧!

如果不想这样的
可以去down一个第三方计时控件呵!
 
你可以把第二个事件放在一个线程中。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TWaitThread=class(TThread)
protected
procedure Execute; override;
procedure MyAction;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TWaitThread.MyAction;
begin
showmessage('here'); //处理第二个事件
end;

procedure TWaitThread.Execute;
var MyEvent :Thandle;
begin
MyEvent := CreateEvent(nil,True,False,nil) ;
waitforSingleObject(MyEvent,120000);
CloseHandle(MyEvent);
Synchronize(MyAction);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
wt: TWaitThread;
begin
wt:=TWaitThread.Create(false);

end;

end.
 
用timer 可以实现,如下:
var
starttime: integer;//全局变量

procedure dofirst;
begin
doyourfirstprocedure;
starttime:= GetTickcount;
timer1.interval=10000;//十秒钟检测一次
timer1.enabled:= true;
end;

procedure timer1timer(sender:TObject);
begin
if GetTickcount - starttime = 12000 then //两分钟
begin
dosecondprcedure;
timer1.enabled:= false;
end;
end;
 
sleep(20000)
 
还有,还有,我的这个事件是Memo的OnChange事件
我要的是当Memo中的文字不再变化时(最后一个文字输入后)
再延迟2分钟
 
var StartTime: TDateTime;
begin
StartTime := now;
repeat
Application.ProcessMessages;
until Now > StartTime + 2 * (1/24/60);
end;
 
先定义一个过程:
procedure Delay(x: Extended);
var
CurrentTime: real;
begin
CurrentTime := GetTickCount;
while
(GetTickCount) < (CurrentTime + x) do
Application.ProcessMessages;//此句保证程序仍能响应其它操作
end;

在某事件后加上:
delay(120000);//一秒=1000
....
 
SLEEP???
SLEEP两分钟?
如果我是用户,我第一时间删除这个软件。
 
我的这个事件是Memo的OnChange事件
我要的是当Memo中的文字不再变化时(最后一个文字输入后)
再延迟2分钟
 
为什么不用Timer来控制呢?我觉得应该是可以的!可能效率会低一点,呵呵
 
千万别用SLEEP!
它不会传递系统消息!
 
使用Sleep(2000)了
 
后退
顶部