ErrLook 6 句柄无效,意思是因为HWND窗口句柄不存在。但你用的是PostThreadMessage,用到的是thread identifier,不是句柄。
MSDN: returns ERROR_INVALID_THREAD_ID if idThread is not a valid thread identifier, or if the thread specified by idThread does not have a message queue.#define ERROR_INVALID_THREAD_ID          1444L
所以不知道LZ的ErrLook 6到底怎么来的。

解决方案 »

  1.   

    我用的是多个线程处理,一个消息分发线程,他负责创建其它的多个消息处理线程。然后将收到的消息根据消息处理线和的忙闲状态和处理消息的分类发给他们处理。这种情况在debug环境下没有问题,但是在Release环境中高概率出现(非必现)。所以我觉得应该可能是以分发线程启动以后,算是线程还没有启动完成的情况下,消息分发线程就把消息发送给了处理线程导致的。如果我在消息发送的地方Sleep(100),这样就没有问题了。但是我不明白,如果线程没有准备好,消息队列没有建立的情况下,应该是报的1444,怎么会报6?
      

  2.   

    处理线程初始化加入代码,可以尽快创建线程的消息队列: // 1. 创建消息队列
    MSG msg;
    PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
      

  3.   

    参考MSDN PostThreadMessage Res部分,小心处理好发送/接收之间的同步协作。
      

  4.   

    创建线程时候,传递一个参数,其中放置一个事件,表示线程已经运行。
    线程退出前通知主线程,停止发送消息消息处理完成退出。
    创建的代码检测这个事件然后退出,这是可以开始 PostMessage