2012-02-23 102 views
0

線程程序線程有點新,因爲到目前爲止我從來都不需要它。從主線程中查殺線程

我有以下問題,我需要解決:

我有,你指定它有多少個線程一起工作的應用程序,之後,你得到它的開始。

我知道這可以用ThreadPool來完成,但我需要更多的功能,我不知道如何製作它,因此它會在所有線程完成時進行回調,並且會停止所有線程和隊列。需要。

一個想法是創建一個新的線程,並從那裏使用線程池,以便當我殺死該威脅時,它會殺死從該線程(作爲主線程)開始的線程。也就是說,當隊列被清除時,我可以設置它回調(單線程)。

+0

顯示一些代碼會很好 – Beatles1692 2012-02-23 01:27:45

+0

我不確定結構或我會發布代碼。我需要排隊100個任務,並與10個線程一起工作,並在完成主線程時執行回調(某些功能) – Darko 2012-02-23 01:28:49

+2

這取決於這些線程試圖完成的任務。如果所有這些線程都分解任務,那麼它聽起來像是生產者 - 消費者隊列的一個很好的候選者。 – 2012-02-23 01:29:27

回答

3

你可以使用Task S和CancellationToken S:

 var taskCount = 10; 
     var cancellationTokenSource = new CancellationTokenSource(); 
     for (int i = 0; i < taskCount ; i++) 
     { 
      var cancellationToken = cancellationTokenSource.Token; 
      Task.Factory.StartNew(() => 
      { 
       // do work here. 

       // Also periodically check 
       if(cancellationToken.IsCancellationRequested) 
        return; 

       // or wait on wait handle 
       cancellationToken.WaitHandle.WaitOne(timeout); 
      }, cancellationToken); 
     } 

     // to cancel all threads 
     cancellationTokenSource.Cancel(); 

同時運行的線程數量由TaskFactory內的線程池,根據你的機器的報告的CPU內核爲你管理。如果你想要更多的控制,可以提供你自己定製的TaskFactories我相信。