2013-05-02 29 views
-4

我已經使用CreateThread()成功創建了單個線程。如何使用CreateThread()創建每個具有不同ThreadProc()函數的多線程

現在我想創建'n'個線程,但每個線程使用不同的ThreadProc()。

我曾嘗試下面的代碼,但使用它,「N」是創建的線程數都執行相同的任務(因爲ThreadProc的()函數自動對焦的所有線程是一樣的。)

//Start the threads 
for (int i=1; i<= max_number; i++) 
{ 
CreateThread(NULL, //Choose default security 
       0, //Default stack size 
       (LPTHREAD_START_ROUTINE)&ThreadProc, 
       //Routine to execute. I want this routine to be different each time as I want each thread to perform a different functionality. 
       (LPVOID) &i, //Thread parameter 
       0, //Immediately run the thread 
       &dwThreadId //Thread Id 
      ) 
} 

有什麼我可以創建'n'數量的線程,每個線程使用不同的線程程序?

+1

呃...將每個指針傳遞給不同的線程程序!恐怕我不明白爲什麼要做這件事很困難,或者你想做什麼。由downvotes判斷,其他人也沒有。你能解釋你想做什麼,爲什麼? – 2013-05-02 07:33:55

+1

@DavidM:「將每個指針傳遞給不同的線程程序!」我認爲這就是我正在尋找:) 非常感謝你:) – Ayse 2013-05-02 07:45:02

+1

哈!不用擔心,很高興它非常簡單:) – 2013-05-03 10:13:48

回答

1

試試這個:

DWORD WINAPI ThreadProc1( LPVOID lpParameter) 
{ 
    ... 
    return 0 ; 
} 

DWORD WINAPI ThreadProc2( LPVOID lpParameter) 
{ 
    ... 
    return 0 ; 
} 

... 

typedef DWORD (WINAPI * THREADPROCFN)(LPVOID lpParameter); 

THREADPROCFN fntable[4] = {ThreadProc1, ThreadProc2, ...} ; 

//Start the threads 
for (int i = 0; i < max_number; i++) 
{ 
    DWORD ThreadId ; 

    CreateThread(NULL, 
       0, 
       (LPTHREAD_START_ROUTINE)fntable[i], 
       (LPVOID) i, 
       0, 
       &ThreadId 
      ) ; 
} 

這將啓動MAX_NUMBER線程與在fntable定義不同的線程程序(TreadProc1,ThreadProc2等)。

+0

是否可以使用相同的線程創建兩個Thred過程調用和不同的參數傳遞給每個Thread的線程過程調用。 例如 for thread#1,Thread Procedure is「threadProc()」and parameter is「thread1」。對於線程#2,線程過程是「threadProc()」,參數是「線程2」 – Ayse 2013-05-02 08:05:57

+1

這正是你在你的例子中做的,除了你必須寫「(LPVOID)我」而不是「(LPVOID)&i」 。 – 2013-05-02 08:19:10

+0

我一直在嘗試上面提到的代碼。它編譯成功,但是當代碼被執行時,我收到了錯誤,說明solution.exe已停止工作。你能給我一個解決方案嗎? – Ayse 2013-05-07 07:19:37

相關問題