2012-10-24 42 views
2

如何多次連續調用3個線程?例如:在迭代1中,執行順序應該是「Thread0-> thread1-> thread2」,那麼在迭代2中應該是相同的,即「Thread0 - > thread1-> thread2」,依此類推。示例代碼只執行一次3個線程。它不會進行第二次迭代。如何多次連續調用3個線程?

Thread0 = CreateThread(NULL,0,ThreadProc0, NULL, CREATE_SUSPENDED, &ThreadID); 
    Thread1 = CreateThread(NULL,0,ThreadProc1, NULL, CREATE_SUSPENDED, &ThreadID); 
    Thread2 = CreateThread(NULL,0,ThreadProc2, NULL, CREATE_SUSPENDED, &ThreadID); 

    for(i=0;i<iterations;i++)    //Iterations in calling threads 
    { 
     ResumeThread(Thread0); 
     WaitForSingleObject(Thread0, INFINITE); 
     ResumeThread(Thread1); 
     WaitForSingleObject(Thread1, INFINITE); 
     ResumeThread(Thread2); 
     WaitForSingleObject(Thread2, INFINITE); 
    } 

    // Close thread and semaphore handles 
+4

這是爲什麼的第一件事每個人都試圖與線程做的是徹底擊垮線程的整個點? (你的問題似乎是基於一些誤解,例如,你認爲這意味着什麼「調用3個線程」?你調用函數,它並不意味着任何「調用」線程。) –

+0

David。 。我知道我沒有利用線程的力量,但只是想知道這將如何工作?調用線程意味着調用該線程函數只.. – Hello

+1

你是什麼意思的「調用線程函數」?什麼是「線程功能」?你的意思是線程啓動時運行的函數嗎?如果是這樣,線程在啓動時調用它自己的函數。 –

回答

2

我想你誤解了這個概念。 ResumeThread意味着重新啓動線程,重新運行從一開始線程PROC。它只是恢復從它以前停止的過程。

基本上有兩種方法。

  1. 創建在每次迭代新主題。
  2. 重寫您的線程處理程序以「永久」生活,並使用事件與其同步。

參考這裏:How to restart threads?

1

當你調用WaitForSingleObject()一個線程處理,你正在等待線程來完成運行(當它從它的線程PROC返回)。完成後,ResumeThread()將不會有進一步的影響。

+0

但等待thread0完成運行後,我需要恢復thread1。爲此,我使用了ResumeThread()。但我的問題是for循環,爲什麼thread0/thread1/thread2不執行多次? – Hello

+2

@你好:只有當線程函數完成時,WaitForSingleObject纔會被標記,你會如何期待它再次運行? –

+0

我應該怎麼做才能在thread2之後在下一次迭代中調用thread0? – Hello

1

你應該看看使用事件來同步線程而不是ResumeThread。