通過結構體傳遞參數給線程
原文鏈接:http://fdyang.iteye.com/blog/1729251
目的:在一個對話框中,點擊按鈕啓動多個線程調用外部的程序(批處理) ,獲取返回值後,將結果依次更新到多個Edit控件
思路 : 通過包含控件信息的一個結構體傳遞參數給線程,在線程函數中控制控件的數據更新。
步驟 :
1.在對話框類的頭文件XXXDlg.h中建立一個結構體, 包括指向控件的指針。
struct threadInfo{
CEdit *pEdit1_1;
}
接着,申明線程函數
UINT ThreadFunc(LPVOID lpParam);
注意,以上二者應在類CXXXDlg的外部。
PS: static DWORD ThreadB1(LPVOID lpParam); //前面加上static就可以放到CXXXDlg類裏面,作爲該Dlg類的成員函數了。
2.
在XXXDlg.cpp文件中定義公共變量: (全局變量 )
threadInfo mThreadInfo;
//(1)設置threadInfo的實例的值.
mThreadInfo.pEdit1_1=&edit1_1; //指向edit控件
//(2)啓動一個線程
CWinThread *pThread=AfxBeginThread(
threadFunc,
&mThreadInfo,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED
);
pThread->ResumeThread();
//(3)在類外部添加線程處理函數
UINT ThreadFunc(LPVOID lpParam)
{
threadInfo *pInfo=(threadInfo*)lpParam; //指向結構體的實例。
//調用批處理處理函數,並且將返回的結果(CString)顯示到edit 控件中。
pInfo->pEdit1_1->SetWindowText(doCheck(batFilePath));
return 0;
}