我在一个对话框里面创建一个线程,对对话框的一个控件操作,但是在debug模式下,调用UpdataData()时,会报错:
代码如下:
void CControlDemoDlg::OnButtonThread() //一个button 的Lclick 操作
{
CreateThread( NULL, 0, ThreadCall, this, 0, NULL );
}void CControlDemoDlg::ThreadRunSample()
{
GetDlgItem(IDC_STATIC_THREAD)->SetWindowText(" thread1 running...");
UpdateData(FALSE);
}DWORD WINAPI CControlDemoDlg::ThreadCall(LPVOID lpParameter)
{
CControlDemoDlg* tCall = (CControlDemoDlg*) lpParameter;
tCall->ThreadRunSample();
return 0;
}UpdateData(FALSE)这一步会报错,出错位置是wincore.cpp 的 line 894处。 是Assert报的错。请教一下这个问题该怎么解决,是不是我的CreateThread的参数调用的不对呢?
代码如下:
void CControlDemoDlg::OnButtonThread() //一个button 的Lclick 操作
{
CreateThread( NULL, 0, ThreadCall, this, 0, NULL );
}void CControlDemoDlg::ThreadRunSample()
{
GetDlgItem(IDC_STATIC_THREAD)->SetWindowText(" thread1 running...");
UpdateData(FALSE);
}DWORD WINAPI CControlDemoDlg::ThreadCall(LPVOID lpParameter)
{
CControlDemoDlg* tCall = (CControlDemoDlg*) lpParameter;
tCall->ThreadRunSample();
return 0;
}UpdateData(FALSE)这一步会报错,出错位置是wincore.cpp 的 line 894处。 是Assert报的错。请教一下这个问题该怎么解决,是不是我的CreateThread的参数调用的不对呢?
{
CControlDemoDlg* tCall = (CControlDemoDlg*) lpParameter;
tCall->ThreadRunSample(); return 0;
} PostMessage();发送消息给主窗口,在主窗口的消息相应函数里调用UpdateData(FALSE);
后就不要用
UpdateData(FALSE);
了
HANDLE m_hEventUpdate = NULL; //更新事件句柄
HANDLE m_hEventExit = NULL; //退出事件句柄
HANDLE m_hThread = NULL; //线程句柄
DWORD m_nThreadId = 0; //线程ID//声明
static DWORD WINAPI ThreadProc(LPVOID lpParameter)LRESULT CControlDemoDlg::StartThread()
{ //创建线程
m_hThread = CreateThread(NULL, 0, ThreadProc, (LPVOID)this, 0, &m_nThreadId);
if(m_hThread == NULL)
return E_FAIL; return S_OK;
} //线程回调函数
DWORD WINAPI CControlDemoDlg::ThreadProc(LPVOID lpParameter)
{
CWndA *pWnd = (CWndA *)lpParameter;
//pWnd就是你的对话框指针,可以进行相关操作.
return 0;
}