我在一个对话框里面创建一个线程,对对话框的一个控件操作,但是在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的参数调用的不对呢?

解决方案 »

  1.   

    我理解可能是UpdateData(FALSE)的问题,但是不清楚该如何解决。
      

  2.   

    ThreadCall不能是对话框类的成员函数
      

  3.   

    看来就是不能用UpdateData(FALSE)这个函数了,建立消息感觉就是很麻烦,我也对这个不太熟,有高人能给指点一下否?
      

  4.   

    DWORD WINAPI CControlDemoDlg::ThreadCall(LPVOID lpParameter) 

    CControlDemoDlg* tCall = (CControlDemoDlg*) lpParameter; 
    tCall->ThreadRunSample(); return 0; 
    } PostMessage();发送消息给主窗口,在主窗口的消息相应函数里调用UpdateData(FALSE);
      

  5.   

    PostMessage给主窗口,由主窗口来处理
      

  6.   

    使用GetDlgItem(IDC_STATIC_THREAD)->SetWindowText(" thread1 running..."); 
    后就不要用
    UpdateData(FALSE); 
      

  7.   


    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; 
    }