通過結構體傳遞參數給線程。
目的:在一個對話框中,點擊按鈕啟動多個線程調用外部的程序(批處理) ,獲取返回值后,將結果依次更新到多個Edit控件
思路 : 通過包含控件信息的一個結構體傳遞參數給線程,在線程函數中控制控件的數據更新。
步驟 :
1.在對話框類的頭文件XXXDlg.h中建立一個結構體, 包括指向控件的指針。
struct threadInfo{ CEdit *pEdit1_1; }
接着,申明線程函數:
UINT ThreadFunc(LPVOID lpParam);
注意,以上二者應在類CXXXDlg的外部。
2. 在XXXDlg.cpp文件中定義公共變量: (全局變量 )
threadInfo mThreadInfo;
3. 在按鈕的消息處理函數中,創建線程,調用線程函數。
//(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; }