1. 程式人生 > >MFC動態建立執行緒

MFC動態建立執行緒

這裡需要一個知識點,就是多個執行緒可以共用一個執行緒函式,所以我們就不需要去煩惱怎麼動態建立不同的執行緒函式。只需要考慮同一個執行緒函式什麼時候該做哪一個執行緒的事就行。所以變化的就是穿進執行緒函式的引數了,然後由這個值來確定是哪個執行緒.

例子如下:
效果如圖:

程式碼如圖:

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,因為這裡的演示需要,所以把執行緒最大數固定了,其實它是個可變的變數.