一个很奇怪的问题啊!
我在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 )原因何在? 值得注意的是,有些时候竟然能执行成功,也就是接收到了线程消息!
高人们! 指点一下!
我在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 )原因何在? 值得注意的是,有些时候竟然能执行成功,也就是接收到了线程消息!
高人们! 指点一下!
程序并没有执行子线程,而是继续执行 if(m_MyThread),这时m_MyThread就有可能
产生ERROR_INVALID_THREAD_ID;但如果运行到 m_MyThread->CreateThread();后
执行子线程,程序就可能运行成功。你可以在子线程合适的地方通知创建者然后再if(m_MyThread)
CreateThread后,线程已经运行了