2011-07-20 11 views
0

これは3スレッドを呼び出すために使用するコードです。C#3スレッドを維持し、1スレッドを閉じるには

for (int i = 0; i < 3; i++) 
{ 
    new Thread(() => { processEventLogTesting(); }) {IsBackground = true }.Start(); 
} 

私はしかし、この

public static int ThreadCounter = 0; 

if (ThreadCounter < 3) 
{ 
    ThreadCounter ++; 
    for (int i = 0; i < 3; i++) 
    { 
     new Thread(() => 
     { 
      processEventLogTesting(/*somewhere in here code says */ThreadCounter--;);}) {IsBackground = true }.Start(); 
     } 
    } 
} 

にそれを調整することを考えていた、私はこれはおそらく、これを行うための最善の方法はないと思います。また、スレッドxが20分以上経過すると、スレッドxをkillするという新しいタイマーを入れたい。どんな助けもありがとうございます。

+1

ような何かをしようとするだろうか? – jglouie

+4

その斧を慎重に、ユージン。あなたがしようとしているのは*超危険です*。あなた自身がコードを書くように書いてください。スレッドを中断しないでください。詳細については、http://blogs.msdn.com/b/ericlippert/archive/2010/02/22/should-i-specify-a-timeout.aspxを参照してください。 –

+0

非常に良い記事です。 +1。 – hoodaticus

答えて

-1

私が何をするかのスレッドを知らないので、私は、スレッドが何をやっているこの

 private Object lockObject = new Object(); 
     private int threadCounter = 0; 
     public int ThreadCounter 
     { 
      get 
      { 
       lock(lockObject) 
       { 
        return threadCounter; 
       } 
      }    
      set 
      { 
       lock(lockObject) 
       { 
        threadCounter = value; 
       } 
      } 
     } 

     //this should be a method 
     if (ThreadCounter < 3) 
     { 
      ThreadCounter ++; 
      new Thread(() => 
      { 
       Timer t = new Timer(() => EndThread(), null, 0, 20 * 60 * 1000); 
       while(threadIsRunning) 
       {      
        processEventLogTesting(/*somewhere in here code says ThreadCounter--*/;); 
       } 
      }) {IsBackground = true }.Start(); 

       } 
      } 
     } 

     private void EndThread() 
     { 
      threadIsRunning = false; 
     } 
+0

これは、processEventLogTestingがハングアップしている場合、実際にはスレッドを終了しません。そのためにはThread.Abortを呼び出す必要があります。 –

+0

@AresAvatar Thread.Abortは危険です。最後の手段としてのみ使用してください – Marin

+0

はい - 最後の手段として。 OPは彼の機能の内部を提供しなかった。 –

関連する問題