在MFC中類內部建立線程處理函數以便調用類的成員函數和變量

在用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;

}

個人比較喜歡這種方法,有其他方法後續再慢慢補充。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章