class CMainDlg : public CDialog
{
CMyListCtrl m_listctrl;
}
对话框的Onclose触发时会通知并等待线程退出
CMainDlg::OnClose()
{
SetEvent(m_event);
if(WaitForSingleObject(g_htread,INFINITE/*5000*/)==WAIT_TIMEOUT )
{
//...
}
}线程函数:
DWORD WINAPI ThreadFun(PVOID lpParam )
{
CMainDlg* pDlg = ( CMainDlg* )lpParam ;
while(WaitForSingleObject(m_hProcessThreadEvent,2)==WAIT_TIMEOUT)
{
//....
pDlg->m_listctrl.SetItemText(1,2,"aaa");
//...
}
return 0 ;
}
当调用m_listctrl.SetItemText或者m_listctrl.GetItemData线程就会一直卡在这里,被一直挂起,使得线程函数ThreadFun不能正常return退出。
貌似CListCtrl内部调用VERIFY(::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)&lvi));时一直无返回。
{
CMyListCtrl m_listctrl;
}
对话框的Onclose触发时会通知并等待线程退出
CMainDlg::OnClose()
{
SetEvent(m_event);
if(WaitForSingleObject(g_htread,INFINITE/*5000*/)==WAIT_TIMEOUT )
{
//...
}
}线程函数:
DWORD WINAPI ThreadFun(PVOID lpParam )
{
CMainDlg* pDlg = ( CMainDlg* )lpParam ;
while(WaitForSingleObject(m_hProcessThreadEvent,2)==WAIT_TIMEOUT)
{
//....
pDlg->m_listctrl.SetItemText(1,2,"aaa");
//...
}
return 0 ;
}
当调用m_listctrl.SetItemText或者m_listctrl.GetItemData线程就会一直卡在这里,被一直挂起,使得线程函数ThreadFun不能正常return退出。
貌似CListCtrl内部调用VERIFY(::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)&lvi));时一直无返回。
而主线程又在等待线程结束,无法处理这个消息,两个线程相互等待相互锁住了。