消息放线程里发送就断言错误?
一个SDI程序,有几个窗口,运行时从Doc打开若干文件,打开之后通过这些文件里的信息向各个子窗口发送消息。问题如下:
发送消息如果放在主线程里,运行没有问题,就是会稍微“卡”一下,经过查找,发现是发送消息的时候“卡”了,现在想新开一个线程,发送消息,但是运行时触发断言错误,提示要发送消息的子窗口m_hwnd非法 。具体代码:
正常主线程里时
BOOL CCtrlSystemDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
...打开文件操作...
//流速面板初始化
pMain->SendMessageToPane(0,WM_USER_MSG_INITPANE);
//频率面板初始化
pMain->SendMessageToPane(2,WM_USER_MSG_INITPANE);
//状态栏初始化
pMain->SendMessageToPane(3,WM_USER_MSG_INITPANE);
//控制进度条
pMain->SendMessageToPane(3,WM_USER_MSG_UPDATERTPROGRESSBAR);
}
UINT InitPaneThread(LPVOID pParam)
{
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
ASSERT(pMain);
//流速面板初始化
pMain->SendMessageToPane(0,WM_USER_MSG_INITPANE);
//频率面板初始化
pMain->SendMessageToPane(2,WM_USER_MSG_INITPANE);
//状态栏初始化
pMain->SendMessageToPane(3,WM_USER_MSG_INITPANE);
//控制进度条
pMain->SendMessageToPane(3,WM_USER_MSG_UPDATERTPROGRESSBAR);
return(0);
}
void CMainFrame::SendMessageToPane(int nPaneIndex,UINT msg)
{
if (nPaneIndex == 0)
{//流速pane
m_VolecityPane.PostMessage(msg,NULL,NULL);
}
else if (nPaneIndex == 1)
{//输出pane
m_OutputPane.PostMessage(msg,NULL,NULL);
}
else if (nPaneIndex == 2)
{//频率pane
m_FreqPane.PostMessage(msg,NULL,NULL);
}
else if (nPaneIndex == 3)
{//状态栏
m_wndStatusBar.PostMessage(msg,NULL,NULL);
}
}