做了一个单文档的程序,其中又创建了一个线程来侦听网口数据,如果收到数据,通过SetWindowText()显示。但是我有时候(不是每次)退出程序时SetWindowText()会出错,提示对象指针为0;
UINT CEPTestView::ListenThread(LPVOID pParam)
{
...
SetWindowText();
...
}
我已经在SetWindowText()之前通过
if (this->m_hWnd == NULL)
return;
做了控制,但是还是有问题。
而且我也在析构函数中加入WaitForSingleObject(m_pListenThread->m_hThread,INFINITE);也不能完全解决问题。所以我估计是程序先销毁了对象,后结束的线程。但我不知道怎样先结束线程,延时后再结束程序。
也就是当我们点击×关掉程序时,程序是怎样一个析构过程。谢谢大家帮忙!
UINT CEPTestView::ListenThread(LPVOID pParam)
{
...
SetWindowText();
...
}
我已经在SetWindowText()之前通过
if (this->m_hWnd == NULL)
return;
做了控制,但是还是有问题。
而且我也在析构函数中加入WaitForSingleObject(m_pListenThread->m_hThread,INFINITE);也不能完全解决问题。所以我估计是程序先销毁了对象,后结束的线程。但我不知道怎样先结束线程,延时后再结束程序。
也就是当我们点击×关掉程序时,程序是怎样一个析构过程。谢谢大家帮忙!
{
SetWindowText();
}
return;
和
if(IsWindow(hwnd))
{
SetWindowText();
}有什么区别吗?谢谢
谢谢大家
这里相当于main函数(WinMain)结束,于是所有主函数中定义的局部变量和全局变量都将执行析构函数。
所有其他线程都应该在主线程结束前退出。
如果这些线程没有退出,将在主线程结束后被操作系统立刻终止。这些线程中定义的局部变量不会执行析构函数。