关于线程和TTimer的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 CADVector
  • 开始时间 开始时间
C

CADVector

Unregistered / Unconfirmed
GUEST, unregistred user!
我在主线程中建立一个Timer定时器进行定时是正常的,但是如果我在工作线程(也就是我另外创建的线程)中建立的定时器无法工作,就是时间到了没有触发OnTimer事件,
我在TTimer源码中看了,他是为每个定时器对象创建了一个非可视化的窗口,然后设置了一个窗口函数,时间到了,系统会向指定的窗口发送消息WM_TIMER,请高手指点为什么在工作线程中创建就收不到消息了?
 
因为工作线程没有消息队列
想在线程中定时
可以使用系统定时对象
 
这位仁兄,能否讲具体点,比如给个例子
 
你查一下
CreateWaitableTimer
SetWaitableTimer
的用法就知道怎么搞了
 
给你贴一段代码,你自己用就是了,timesetevent钟的10*1000是表示10秒执行一次,因为这里的计时方式是到毫秒级别,所以就要*1000了。
procedure TYourThread.Execute;
var
timerid:integer;
htimerevent:Thandle;
begin
{ Place thread code here }
htimerevent := CreateEvent(nil, False, False, nil);
timerid := timesetevent(10*1000,0,TFNTimecallback(htimerevent),0,time_periodic or time_callback_event_set);
repeat
if Terminated then
break;
if WaitForSingleObject(htimerevent,INFINITE) = WAIT_OBJECT_0 then
begin
do
Something;
end;
until false;
timekillevent(timerid);
CloseHandle(htimerevent);
end;
 
用我写的定时器线程吧,不依靠TTimer的。http://hi.baidu.com/523399
 
后退
顶部