多個線程調用同一個線程函數

多個線程調用同一個線程函數
懸賞分:50 - 解決時間:2007-12-11 13:59
如題,能這樣嗎?因爲有很多個操作,但是這些操作都是一樣的,所以想用相同的線程函數,但是感覺運行時線程還是一個一個運行,並沒有提高速度,應該是我理解錯了!!老大些幫幫忙,給個建議 
問題補充:
我的意思是線程處理函數,剛剛找了點資料,覺得這想法沒有錯,只要線程裏面不用全局或者靜態變量就行,要用就要鎖,主要是這個問題,你這個模板太好了,我就想用這個,非常感謝
提問者: 76073424 - 二級
最佳答案
你提到的線程函數是一般函數還是生成線程的函數,或是用於運行特定函數的線程?

如果是在用VC中想用多個線程運行同樣的任務,而這些任務之間沒有通訊問題和內存共享的問題,那可以用下面的模板:
DWORD WINAPI TaskThreadProc(LPVOID)
{
// 獨立任務
// ...
}

void RunTaskUseMultiThread(int nThreadCount) // 線程個數爲nThreadCount
{
HANDLE* threads = new HANDLE[nThreadCount]; // 線程句柄,對線程進行狀態的控制時用到
DWORD* idThreads = new DWORD[nThreadCount]; // 線程id,給線程發消息時用到
int i;
for (i = 0; i < nThreadCount; i++)
{
threads[i] = CreateThread( NULL, 0, TaskThreadProc, NULL, CREATE_SUSPENDED, &idThreads[i]); // 創建線程
}
for (i = 0; i < nThreadCount; i++) // 由於生成的是CREATE_SUSPENDED的線程,所以這裏開始讓線程開始運行
ResumeThread(threads[i]);
WaitForMultipleObjects(nThreadCount, threads, TRUE, INFINITE); // 等待線程運行結束
for (i = 0; i < nThreadCount; i++)
CloseHandle(threads[j]); // 銷燬線程
delete [] threads;
delete [] idThreads;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章