2010-06-09 2 views
0

아래 스레드 풀 프로그램을 수행했지만 WaitCallBackMethod (여기 ThreadPoolCallback)가 2 번 호출되는 것이 이상적입니다 (이상적으로 1ce라고 함). 내가 만들고있는 쓰레기통은 무엇입니까?스레드 풀 구현 (C# 3.0)의 문제점

public class Calculation 
    { 
     #region Private variable declaration 
      ManualResetEvent[] factorManualResetEvent = null; 
     #endregion 

     public void Compute() 
     {     
       factorManualResetEvent = new ManualResetEvent[2]; 

       for (int i = 0; i < 2; i++){ 
       factorManualResetEvent[i] = new ManualResetEvent(false); 
       ThreadPool.QueueUserWorkItem(ThreadPoolCallback, i);} 


      //Wait for all the threads to complete 
      WaitHandle.WaitAll(factorManualResetEvent); 

     //Proceed with the next task(s) 
     NEXT_TASK_TO_BE_EXECUTED();   
     } 

     #region Private Methods 

     // Wrapper method for use with thread pool. 
     public void ThreadPoolCallback(Object threadContext) 
     { 
      int threadIndex = (int)threadContext; 
      Method1(); 
      Method2();   
      factorManualResetEvent[threadIndex].Set(); 
     } 

     private void Method1() 
      { //Code of method 1} 

     private void Method2() 
      { //Code of method 2 } 

     #endregion 
} 

내가

//Initializang all the manual reset events first 
Enumerable.Range(0, exposureManualResetEvent.Length).ToList().ForEach(i => 
{ 
    exposureManualResetEvent[i] = new ManualResetEvent(false); 
}); 

Enumerable.Range(0, 1).ToList().ForEach(i => 
{ 
ThreadPool.QueueUserWorkItem(ExposureThreadPoolCallback, i); 
}); 

중지됩니다 프로그램을 할 경우! 나는 C# 3.0 감사

답변

0

음을 사용하고

, 당신은 실행 각 스레드에 대한에 ThreadProc로 ThreadPoolCallback 생각 (ThreadPool.QueueUserWorkItem() 새 스레드 당신이 그것을 호출 할 때마다 시작됩니다.).

대기열 2 스레드이므로 Proc를 두 번 호출하게됩니다.

+0

그럼 난 작동 얻을 inorder를 무엇을해야하는지 .. 나는 당신이 생각하고 싶지 모르겠어요 – Newbie

+0

도와주세요 - 만에 하나의 일을 처리하는 경우 시간이 있고 처리되는 동안 기다려야합니다. 왜 그냥 synch (스레드 없음)로하지 않습니까? – RobS

0

당신은 두 번 호출됩니다

for (int i = 0; i < 2; i++) 
{ 
    factorManualResetEvent[i] = new ManualResetEvent(false); 
    ThreadPool.QueueUserWorkItem(ThreadPoolCallback, i); 
} 
+0

그럼 inorder를 어떻게해야 작동합니까? 제발 도와주세요. – Newbie