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

Ive*_*aev 0 delphi multithreading timer delphi-2010

我使用以下内容创建Windows计时器

FHandle := SetTimer(0, 0, 1000, TFNTimerProc(@TMyClass.MyMethod));
Run Code Online (Sandbox Code Playgroud)

该线程是否显示在Delphi"Threads"窗口中.如果是,我如何获得此线程ID?

Rob*_*edy 5

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

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

最后,除非该方法是一种class static方法,否则它将无法按您希望的方式工作.如果回调的签名与SetTimer您期望提供的签名匹配,则不需要类型转换,因此如果您需要键入函数指针以使编译器接受您的代码,那么您可能错了.