創建一個基於對話框的工程,工程名為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);
}
運行結果: