请问一下VC6里关于mfc对话框的多线程问题
用vc6建一个基于mfc对话框的项目,对话框类ThreadTestDlg.加上一个CEdit和CButton控件,在ThreadTestDlg里加一个int成员 m_iCurrInt保存数据,BOOL m_bStart;显示按键状态.按照msdn里的例子建立全局线程函数,把调用对话框作为参数传入.目的是在按下按钮后执行线程,隔一秒对m_iCurrInt++,实时显示在edit上.再次按下按钮后停止线程.
问题是,如果我在线程函数里对传入的ThreadTestDlg参数调用UpdataData()函数程序就出runtime错.如果注释掉UpdateData(FALSE),可以停止线程,结果显示也正确.但是我想要在对话框上调用UpdateData()使edit显示实时效果,请教一下该怎么做.
UINT MyThreadProc( LPVOID pParam ) //作成类函数编译不过
{
CThreadTestDlg* pDlg = (CThreadTestDlg*)pParam;
if (pDlg == NULL)
return 1; // if pObject is not valid
while ( pDlg->m_bStart ) //判断线程是否结束
{
CString sText;
sText.Format( "No. %d", pDlg->m_iCurrInt++ );
pDlg->m_Edit_String = sText; //edit显示
// pDlg->UpdateData(FALSE); //不注释运行出错
Sleep( 1000 );
}
return 0; // thread completed successfully
}
按键响应函数调用线程函数:
void CThreadTestDlg::OnBUTTONThread()
{
// TODO: Add your control notification handler code here
CThreadTestDlg *pDlg = this; //传入对话框
if ( !m_bStart )
{
m_bStart = TRUE;
m_Button_Thread.SetWindowText( "Stop" );//改变按钮显示
AfxBeginThread(MyThreadProc, pDlg); //调用线程
}
else
{
m_bStart = FALSE; //设置状态
m_Button_Thread.SetWindowText( "Start" );
UpdateData( FALSE );
}
}