试试在 GetMessage 之前,先调用一个空的   PeekMessageW(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);

解决方案 »

  1.   

    试了仍没什么用。测试时发现调试状态下在waitforsingleibjec下断点也是OK的,百度了下,发现有人说PostThreadMessage后需要sleep下,结合之前的情况,于是发送WM_QUIT后sleep(100),貌似OK了,但MSDN上说需要调用Sleep是因为在postthreadmessage失败时才调用,但这里明显post成功了,搞不懂,好奇怪。
      

  2.   

    那就说明你没有发出 WM_THREAD_START_TIMER或者WM_TIMER:给线程,线程一直处于循环之中
      

  3.   

    DWORD dwRet = WaitForSingleObject(m_hHeartBeatThread, INFINITE);
            if (WAIT_TIMEOUT == dwRet)INFINITE 改10000 看看
      

  4.   

    这段代码看起来没什么问题,在win32下跑一下试试。另,INFINITE的等待不会TIMEOUT一般的用法是等待一段时间,然后判断线程是否在运行,在运行则杀死,然后关闭句柄
      

  5.   

    这里的问题是线程return了,但是没有真正结束,是否是僵死了。在win32下调试一下,看线程到底是否还在
      

  6.   

    DWORD WINAPI SendHeartBeatProc(LPVOID lpParameter)
    {
    MSG msg;
    BOOL bExitThread = FALSE;
    while(GetMessage(&msg, NULL, 0, 0))
    {
    switch(msg.message)
    {
    case WM_THREAD_START_TIMER:
    { }
    break; case WM_TIMER:
    { }
    break;
    }
    TranslateMessage(&msg);
    DispatchMessage(&msg); 
    } printf("endHeartBeatProc exit \n");
    return TRUE;
    }
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    m_hHeartBeatThread = CreateThread(NULL,0,SendHeartBeatProc, NULL, 0,&m_dwHeartBeatThreadID); if (m_hHeartBeatThread)
    {
    if (m_dwHeartBeatThreadID)
    {
    BOOL bRet = FALSE;
    while (!bRet )
    {
    printf("Post Message.\r\n");
    bRet = PostThreadMessage(m_dwHeartBeatThreadID, WM_QUIT, 0, 0);
    }
    printf("Post Success.\r\n");
    } DWORD dwRet = WaitForSingleObject(m_hHeartBeatThread, INFINITE);
    if (WAIT_TIMEOUT == dwRet)
    {
    ::TerminateThread(m_hHeartBeatThread,0);
    }
    }
    return 0;
    }
      

  7.   

    原本是有发送消息,为了简单化问题都注释掉了,原本是等待3秒,发现总是超时,后测试时改成永久,发现等了几分钟还没返回
    你说的可能有这可能,win32下是没问题的。就是在wince下,我再研究下吧
      

  8.   

                while (!bRet )
                {
                    printf("Post Message.\r\n");
                    bRet = PostThreadMessage(m_dwHeartBeatThreadID, WM_QUIT, 0, 0);
                }
    //
    还是这样 牢靠:
    PostThreadMessage 不能保证 消息 被 执行。            while (!bRet )
                {
                    printf("Post Message.\r\n");
                    bRet = PostThreadMessage(m_dwHeartBeatThreadID, WM_QUIT, 0, 0);
                   Sleep(0);            
                 }