timer事件在TWebModule中不能触发(100分)

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

gcyzyw

Unregistered / Unconfirmed
GUEST, unregistred user!
我在TWebModule中放了一个timer,想通过timer实时检测数据库中的信息,得到后在timer的ontimer中实时的打开一个网页,但是好象timer的事件触发不了
 
当然,Timer是通过窗口消息实现的,TWebModule不是窗口没有Handle,所以无效。不过你可以做一个隐藏窗口,负责接受消息,Timer就放那个窗口上。
 
接受,但不太明白,在TWebModule中怎么加一个隐藏窗口,负责接受消息?
谢谢您的回答
 
TWebModule不是窗口没有Handle
 
没有窗口也可以试着这样能不能放上TIMER。

1. 可以使用非可视控件,只要 uses 相应的 Unit 即可。
关于在 Console Application 里面使用 TTimer 控件,需要说明几点:
(1) Console Application 没有消息处理能力,所以我们要自行处理;
(2) TTimer 的 OnTimer 事件必须为某个类的成员函数,因此要动态的给 OnTimer 时间赋值就需要把 OnTimer 事件的处理函数包装在某个类中(详见代码)
(3) 相较而言,使用 SetTimer/KillTimer API 来做定时器更为简单(因为可以直接设置回调函数)
下面是一个简单的例子:
//-- ConsoleTimerDemo by Plzw ----------------------------------------------------------------------
program ConsoleTimerDemo;

{$APPTYPE CONSOLE}

uses
SysUtils, ExtCtrls, Windows;

type
TMyTimer = class
private
FTimer: TTimer;
procedure TimerProc(Sender: TObject);
public
constructor Create;
destructor Destroy; override;
end;

constructor TMyTimer.Create;
begin
FTimer := TTimer.Create(nil);
FTimer.Interval := 1000;
FTimer.OnTimer := TimerProc;
end;

destructor TMyTimer.Destroy;
begin
FTimer.Free;
inherited;
end;

procedure TMyTimer.TimerProc(Sender: TObject);
begin
WriteLn('Timer Trigger!');
end;

var
Msg: TMsg;
Timer: TMyTimer;
begin
Timer := TMyTimer.Create;
try
while Windows.GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
finally
Timer.Free;
end;
end.
 
后退
顶部