MFC线程优先级程序图示
線程優先級等級描述如下;
idle????? (最低)??? THREAD_PRIORITY_IDLE
LOWEST? 低??? THREAD_PRIORITY_LOWEST
BELOW?? 低于標準??? THREAD_PRIORITY_BELOW_NORMAL
NORMAL(標準)??? THREAD_PRIORITY_NORMAL
ABOVE??? 高于標準??? THREAD_PRIORITY_ABOVE_NORMAL
HIGHEST (高)??? THREAD_PRIORITY_HIGHEST
CRITICAL(最高)??? THREAD_PRIORITY_TIME_CRITICAL
Win7,VC6,新建一個對話框工程;添加7個進度條控件;其每個控件的ID為IDC_PROGRESSx;
添加一個按鈕;添加按鈕的單擊函數;
對話框Cpp文件頭部添加如下代碼;
static UINT g_uCount1 = 0; static UINT g_uCount2 = 0; static UINT g_uCount3 = 0; static UINT g_uCount4 = 0; // 各個線程各自的循環計數 static UINT g_uCount5 = 0; static UINT g_uCount6 = 0; static UINT g_uCount7 = 0;CProgressCtrl* g_ptrProgress1 = NULL; CProgressCtrl* g_ptrProgress2 = NULL; CProgressCtrl* g_ptrProgress3 = NULL; //各個進度條的指針 CProgressCtrl* g_ptrProgress4 = NULL; CProgressCtrl* g_ptrProgress5 = NULL; CProgressCtrl* g_ptrProgress6 = NULL; CProgressCtrl* g_ptrProgress7 = NULL;UINT Thread1(LPVOID) {while (g_uCount1 < 100000000 ){g_uCount1++;if (g_uCount1 % 10000000 == 0){if (g_ptrProgress1){g_ptrProgress1->SetPos(g_uCount1/1000000);} } }return 0; }UINT Thread2(LPVOID) {while (g_uCount2 < 100000000 ){g_uCount2++;if (g_uCount2 % 10000000 == 0){if (g_ptrProgress2){g_ptrProgress2->SetPos(g_uCount2/1000000);} } }return 0; }UINT Thread3(LPVOID) {while (g_uCount3 < 100000000 ){g_uCount3++;if (g_uCount3 % 10000000 == 0){if (g_ptrProgress3){g_ptrProgress3->SetPos(g_uCount3/1000000);} } }return 0; }UINT Thread4(LPVOID) {while (g_uCount4 < 100000000 ){g_uCount4++;if (g_uCount4 % 10000000 == 0){if (g_ptrProgress4){g_ptrProgress4->SetPos(g_uCount4/1000000);} } }return 0; }UINT Thread5(LPVOID) {while (g_uCount5 < 100000000 ){g_uCount5++;if (g_uCount5 % 10000000 == 0){if (g_ptrProgress5){g_ptrProgress5->SetPos(g_uCount5/1000000);} } }return 0; }UINT Thread6(LPVOID) {while (g_uCount6 < 100000000 ){g_uCount6++;if (g_uCount6 % 10000000 == 0){if (g_ptrProgress6){g_ptrProgress6->SetPos(g_uCount6/1000000);} } }return 0; }UINT Thread7(LPVOID) {while (g_uCount7 < 100000000 ){g_uCount7++;if (g_uCount7 % 10000000 == 0){if (g_ptrProgress7){g_ptrProgress7->SetPos(g_uCount7/1000000);} } }return 0; }代碼分別是:每個線程各自使用的循環計數,每個進度條的指針定義,7個線程函數;? 在每個線程函數根據計數設置不同的進度條的值;
在對話框的 OnInitDialog() 成員函數,在??? “// TODO: Add extra initialization here”??? 這句之后,添加如下代碼;根據進度條控件的ID獲取其指針;
g_ptrProgress1 = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);g_ptrProgress2 = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS2);g_ptrProgress3 = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS3);g_ptrProgress4 = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS4);g_ptrProgress5 = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS5);g_ptrProgress6 = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS6);g_ptrProgress7 = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS7);在單擊處理函數,使用AfxBeginThread按照不同線程優先級來啟動線程;AfxBeginThread函數的第一個參數是創建的線程的執行函數;
void CThrpriDlg::OnGo() {// TODO: Add your control notification handler code here//創建7個不同優先級別的線程AfxBeginThread(Thread1,NULL,THREAD_PRIORITY_TIME_CRITICAL); AfxBeginThread(Thread2,NULL,THREAD_PRIORITY_HIGHEST); AfxBeginThread(Thread3,NULL,THREAD_PRIORITY_ABOVE_NORMAL); AfxBeginThread(Thread4,NULL,THREAD_PRIORITY_NORMAL); AfxBeginThread(Thread5,NULL,THREAD_PRIORITY_BELOW_NORMAL); AfxBeginThread(Thread6,NULL,THREAD_PRIORITY_LOWEST); AfxBeginThread(Thread7,NULL,THREAD_PRIORITY_IDLE); }運行如下圖;開始,
運行到某個時刻,
結束;
?
總結
以上是生活随笔為你收集整理的MFC线程优先级程序图示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC++读写INI文件示例
- 下一篇: C语言宏定义中使用 do{}while(