设置使用SetTimer()API创建的线程的名称

时间:2010-01-18 15:52:40

标签: delphi multithreading timer delphi-2010

我使用以下

创建一个Windows计时器
FHandle := SetTimer(0, 0, 1000, TFNTimerProc(@TMyClass.MyMethod));

此线程是否显示在Delphi“Threads”窗口中。如果是,我如何获得此线程ID?

2 个答案:

答案 0 :(得分:5)

该功能没有创建线程。当程序处理wm_Timer消息时,OS会调用回调函数。它是在调用SetTimer的同一个线程的上下文中调用的,因此线程最好有一个消息泵。 (你从主VCL线程调用它,然后由TApplication类为你提供消息泵。)

此外,SetTimer不会返回句柄。它返回一个计时器ID。

最后,除非该方法是class static方法,否则它将无法按您希望的方式工作。如果回调的签名与SetTimer期望你提供的签名相匹配,那么你就不需要进行类型转换,所以如果你需要输入函数指针以使编译器接受你的代码,你可能得到它错。

答案 1 :(得分:3)

SetTimer不会创建线程,但会在指定的超时后在主线程的上下文中调用指定的函数。如果您未传递回调函数,SetTimer会向您的主窗口类发布WM_TIMER消息。

有关详细信息,请参阅MSDN reference for SetTimer