MFC動態建立執行緒
阿新 • • 發佈:2019-02-02
這裡需要一個知識點,就是多個執行緒可以共用一個執行緒函式,所以我們就不需要去煩惱怎麼動態建立不同的執行緒函式。只需要考慮同一個執行緒函式什麼時候該做哪一個執行緒的事就行。所以變化的就是穿進執行緒函式的引數了,然後由這個值來確定是哪個執行緒.
例子如下:
效果如圖:
程式碼如圖:
1.開始按鈕
UpdateData(TRUE);
for (int i =0;i<m_countThread;i++)
{
AfxBeginThread(ThreadProc,(LPVOID)i);//i就像是區別執行緒的ID
}
2.執行緒函式
UINT ThreadProc(LPVOID lParam)
{
SetDlgItemInt(AfxGetApp()->m_pMainWnd->m_hWnd, g_uStatic[(UINT)lParam], g_i[(UINT)lParam]++,TRUE) ;
SetTimer(AfxGetApp()->m_pMainWnd->m_hWnd, (UINT)lParam, 1000, NULL);
return 0;
}
3.定時器函式
void CMFCTESTDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值
SetDlgItemInt(g_uStatic[nIDEvent], g_i[nIDEvent]++);
CDialogEx::OnTimer(nIDEvent);
}
4.全域性變數
int g_i[6] = {0} ;
UINT g_uStatic[6] = { IDC_STATIC_1,IDC_STATIC_2 ,IDC_STATIC_3,
IDC_STATIC_4 ,IDC_STATIC_5 ,IDC_STATIC_6 };
這個例子只是拋磚引玉,根據這個思路,可以傳任意的引數進去,然後做相應處理。還有執行緒的個數隨便設定,不一定最大是6,因為這裡的演示需要,所以把執行緒最大數固定了,其實它是個可變的變數.