我使用以下
创建一个Windows计时器FHandle := SetTimer(0, 0, 1000, TFNTimerProc(@TMyClass.MyMethod));
此线程是否显示在Delphi“Threads”窗口中。如果是,我如何获得此线程ID?
答案 0 :(得分:5)
该功能没有创建线程。当程序处理wm_Timer
消息时,OS会调用回调函数。它是在调用SetTimer
的同一个线程的上下文中调用的,因此线程最好有一个消息泵。 (你从主VCL线程调用它,然后由TApplication
类为你提供消息泵。)
此外,SetTimer
不会返回句柄。它返回一个计时器ID。
最后,除非该方法是class static
方法,否则它将无法按您希望的方式工作。如果回调的签名与SetTimer
期望你提供的签名相匹配,那么你就不需要进行类型转换,所以如果你需要输入函数指针以使编译器接受你的代码,你可能得到它错。
答案 1 :(得分:3)
SetTimer
不会创建线程,但会在指定的超时后在主线程的上下文中调用指定的函数。如果您未传递回调函数,SetTimer
会向您的主窗口类发布WM_TIMER
消息。
有关详细信息,请参阅MSDN reference for SetTimer。