使用MFC中的AfxBeginThread創建多線程


創建一個基於對話框的工程,工程名為CreateThreadRect
 
在CreateThreadRect.cpp中增加一個ThreadProc函數,代碼如下
 
工作者線程的函數必須是全局函數或靜態成員函數,不能是普通的成員函數
 
DWORD WINAPI ThreadProc(LPVOID pParam)
{
    CDC* pdc;
    //將傳入的參數轉為RECT*
    RECT* rect=(RECT*)pParam;  
    //得到設備句柄
    pdc=AfxGetApp()->m_pMainWnd->GetDC();  
    //設置畫刷
    CBrush brush(HS_VERTICAL,RGB(0,255,0));  
    //選入到設備中
    CBrush* oldbrush=pdc->SelectObject(&brush);  
    int n=0;
    while(n++<=2000)
    {
        pdc->Rectangle(rect->left,rect->top,rect->right+n,rect->bottom );
        Sleep(1);        
    }
    pdc->SelectObject(oldbrush);
    pdc->ReleaseOutputDC();
    return 0;
}

添加一個按鈕控件IDTHREAD,該按鈕事件代碼如下

void CCreateThreadRectDlg::OnThread() 
{
    // TODO: Add your control notification handler code here
     
    RECT rect1;
    rect1.left=20;  //左上角x坐標
    rect1.top=100;    //左上角y坐標
    rect1.right=20;       //右下角x坐標
    rect1.bottom =rect1.top +100;   //右下角y坐標
    //創建第一個線程ThreadProc,相對優先級THREAD_PRIORITY_IDLE面對任何等級調整為1    
    AfxBeginThread((AFX_THREADPROC)ThreadProc,&rect1,THREAD_PRIORITY_IDLE);
 
    RECT rect2;
    rect2.left=rect1.left;
    rect2.top=rect1.bottom +20;
    rect2.right=rect1.right;
    rect2.bottom =rect2.top +100;
    //創建第二個線程ThreadProc,相對優先級THREAD_PRIORITY_TIME_CRITICAL
    //面對任何等級調整為15,面對REALTIME等級調整為32
    AfxBeginThread((AFX_THREADPROC)ThreadProc,&rect2,THREAD_PRIORITY_TIME_CRITICAL);
}

 

運行結果:

1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM