自己写的一个MFC应用程序使用另一个软件的API函数,取得这个软件运行时的数据,在交互操作的时候 我的MFC程序界面会失去响应。在看USB驱动资料的时候,看到一句话“为了避免读操作时应用程序界面失去响应,单独创建一个读输入报告的线程。”想到我的程序可能也需要创建一个线程,我不知道如何创建线程,找了一个例子程序看了一下
//指向写报告线程的指针
CWinThread * pWriteReportThread;
UINT ReadReportThread(LPVOID pParam)
{
CMyUsbHidTestAppDlg *pAppDlg = (CMyUsbHidTestAppDlg*)pParam //传递参数
}
void CMyUsbHidTestAppDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
………………
CDialog::OnShowWindow(bShow, nStatus);
//创建一个读报告的线程(处于挂起状态)
pReadReportThread=AfxBeginThread(ReadReportThread, this,THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL);
//如果创建成功,则恢复该线程的运行
if(pReadReportThread!=NULL)
{
pReadReportThread->ResumeThread();
}
………………
}
线程建好后,在使用UpDateData进行对话框数据交换时,编译报错了。
error C3861: 'UpdateData': identifier not found
原因是UpDateData是CWnd类的成员函数,我把UpDateData放在对话框类外面使用了,而且线程中不能使用界面函数
引用 13 楼 goodname 的回复:
这个不行
(1)
UpDateData是CWnd类的成员函数
(2)
不能在线程中使用界面函数,最好使用postmessage通知一下
既然不能使用UpDateData,那就看别人用什么吧,找到了SetDlgItemText函数,问题解决。
用法记一下。
CString m_sAltitude;
double m_nAltitude;
m_sAltitude = _T("");
m_sAltitude.Format("%lf",m_nAltitude);
SetDlgItemText(IDC_ALTITUDE,m_sAltitude);