代码之家  ›  专栏  ›  技术社区  ›  Gad D Lord

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

  •  0
  • Gad D Lord  · 技术社区  · 16 年前

    我使用以下命令创建Windows计时器

    FHandle := SetTimer(0, 0, 1000, TFNTimerProc(@TMyClass.MyMethod));
    

    这个线程显示在Delphi的“线程”窗口中吗?如果是,如何获取此线程ID?

    2 回复  |  直到 16 年前
        1
  •  5
  •   Rob Kennedy    16 年前

    该函数没有创建线程。当程序处理 wm_Timer 消息。它是在调用的同一线程的上下文中调用的 SetTimer 所以线程最好有一个消息泵。(如果您是从主VCL线程调用这个,那么消息泵由 TApplication 班级)

    此外, 设置定时器 不返回句柄。它返回计时器ID。

    最后,除非这个方法是 class static 方法,它不会像你希望的那样工作。如果回调的签名与 设置定时器 期望您提供,您不需要类型转换,因此如果您需要类型转换函数指针以使编译器接受您的代码,那么您可能弄错了。

        2
  •  3
  •   jpfollenius Rob Kennedy    16 年前

    SetTimer 不会创建线程,但会在指定的超时之后在主线程的上下文中调用指定的函数。如果不传递回调函数, 设置时间 帖子A WM_TIMER 向主窗口类发送消息。

    见 MSDN reference for SetTimer 更多信息。