在用MFC做開發時,有時遇到些工作線程中有些狀態需要在界面上顯示,最直觀的就是工作線程處理函數的進度顯示。這時候我們就需要在線程內部調用類的成員函數和變量了。下面給出一種最直觀,最簡單的一種處理方法。
類中聲明線程函數:
class CAudioREGDlg : public CDialogEx
{
// 構造
public:
CAudioREGDlg(CWnd* pParent = NULL); // 標準構造函數
// 對話框數據
....
static UINT MyThreadFunction(LPVOID pParam);
...
};
創建線程
AfxBeginThread(MyThreadFunction,this);\\傳入this指針
線程函數函數體
UINT CAudioREGDlg::MyThreadFunction(LPVOID pParam)
{
CAudioREGDlg *p = (CAudioREGDlg*)pParam;//使用指針p調用成員
char *infilename = NULL;
USES_CONVERSION;
infilename = T2A(p->filePath);
char outfilename[10] = "temp.txt";
int ret = p->AudioReg_login();
if ( ret != MSP_SUCCESS )
{
printf("MSPLogin failed , Error code %d.\n",ret);
//return -1;
}
int Finish = p->audio2text(infilename,outfilename);
if (Finish == 0)
{
p->statusText = "識別已完成";
p->GetDlgItem(regStatus)->SetWindowTextW(p->statusText);
p->GetDlgItem(Start_Button)->EnableWindow(TRUE);
}
MSPLogout();//退出登錄
return 0;
}
個人比較喜歡這種方法,有其他方法後續再慢慢補充。