CreateThread有个参数,有时候建立时是暂停线程的。推荐用AfxBeginThread()

解决方案 »

  1.   

    你这线程一进去马上就会退出,DLL可是独立于进程的MOUDEL,GetMessage( &msg, NULL, WM_TIMER, WM_TIMER )根本就不能在DLL里用.
      

  2.   

    你的主线程已经先于创建的线程退出,当然跟踪不到线程函数中去了
    在主线程中应该有等待线程退出的语句,例如这样WaitForSingleObject(ghPollThread, INFINITE);这样你就可以跟踪到线程内部去了见msdn原话:
    Because a DLL is not a task, it does not have a message queue. When a DLL calls SetTimer(), Windows places the resulting WM_TIMER messages into the message queue of the currently active task, which is the application instance that called into the DLL. 所以你无法在dll内获得系统自动给你派发的wm_timer消息,只有自行处理此类消息。例如:调用
    PostThreadMessage(gdwThreadId, WM_TIMER, (WPARAM)guTimerId, (LPARAM)0)函数当然,线程应该在消息发送之前已经建立消息队列,这可以使用win32提供的任意同步机制
      

  3.   

    to waiwaiwai(我总不明白):
    SnmpExtensionInit由windows2000的SNMP服务调用,按msdn原话,是不是说wm_timer消息被放在了SNMP服务的消息队列中了?自行处理此类消息是怎样的?PostThreadMessage函树在什么地方调用?我把SetTimer改成这样,是不是可以呢?
        guTimerId = SetTimer( GetParent( (HWND)ghPollThread ), 1, 2000, NULL );
      

  4.   

    to waiwaiwai(我总不明白):
    SnmpExtensionInit由windows2000的SNMP服务调用,按msdn原话,是不是说wm_timer消息被放在了SNMP服务的消息队列中了?自行处理此类消息是怎样的?PostThreadMessage函树在什么地方调用?我把SetTimer改成这样,是不是可以呢?
        guTimerId = SetTimer( GetParent( (HWND)ghPollThread ), 1, 2000, NULL );
      

  5.   

    在线程中建立消息队列可能接受不到系统自动派发的消息
    我昨天在线程中直接使用PeekMessage建立消息队列就接受不到wm_timer消息
    创建一个隐含窗口应该可以,msdn上好像有例子
    或者直接在主线程中使用postthreadmessage给线程发送消息也应该能够解决