一个很奇怪的问题啊!
   我在AxtiveX控件中使用了多线程,通过发线程消息来执行,我发现很多情况下,线程消息发送失败!
PostThreadMessage()返回值是0,通过GetLastErro()发现错误代码是1444(ERROR_INVALID_THREAD_ID ),可是我的线程是创建成功的呀? 
具体是这样的:
1我新建了个CWinThread类-CMyThread,自定义了几个线程消息,并添加消息处理函数。
2在activeX控件的*ctrl头文件中定义CMyThread*  m_MyThread
3在OnCreat()中:m_MyThread = new CMyThread();
               m_MyThread->CreateThread();
              if(m_MyThread) 
                BOOL err1 = m_MyThread->PostThreadMessage(WM_STARTDOING,0,0);
                DWORD err2 = GetLastErro();
4设置断点发现err1=0(MSDN上说返回非0才正确),err2=1444(ERROR_INVALID_THREAD_ID )原因何在? 值得注意的是,有些时候竟然能执行成功,也就是接收到了线程消息!
高人们! 指点一下!

解决方案 »

  1.   

    自己看下CWinThread::PostThreadMessage的MSDN的解释就可以了。
      

  2.   

    我觉得是多线程的原因,有时候你运行到 m_MyThread->CreateThread();后,
    程序并没有执行子线程,而是继续执行 if(m_MyThread),这时m_MyThread就有可能
    产生ERROR_INVALID_THREAD_ID;但如果运行到 m_MyThread->CreateThread();后
    执行子线程,程序就可能运行成功。你可以在子线程合适的地方通知创建者然后再if(m_MyThread)
      

  3.   

    CreateThread后线程函数还没有执行
      

  4.   

    CWinThread::CreateThread    Starts execution of a CWinThread object. 
    CreateThread后,线程已经运行了