2014-01-02 4 views
0

Ниже приведен мой код, в котором я хочу перезапустить поток, если условие истинно. Как мне нужно сделать это, есть ли способ прекратить поток и перезапустить этот поток? например,Перезапуск и завершение темы

private Thread demoThread = null; 
     this.demoThread = new Thread(new ThreadStart(this.StartForLoop)); 

      this.demoThread.Start(); 

    private void StartForLoop() 
         { 
    if(i=0) 
    { 
    //restart this thread... 
    } 
} 
+1

Если вы хотите приостановить и возобновить поток, вам нужно будет использовать объект синхронизации, например. мьютекс, и проверите проверку потока в соответствующих точках, чтобы увидеть, нужно ли делать перерыв. – HABO

ответ

3

Вы не можете перезапустить поток после завершения его выполнения. Вы можете начать новый поток или использовать pool of worker threads, которые запущены и продолжают работать, и ищут задачи для запуска, а затем снова спать.

Если задачи, которые вы хотите вывести из строя, относительно недолговечны, и вам необходимо их часто запускать, используя команду ThreadPool.

Если вы ориентируетесь новую версию платформы .NET, что лучше рассмотреть возможность использования новых async функций в сочетании с Tasks API как он обеспечивает более высокий уровень абстракции, чем просто с помощью ThreadPool непосредственно в очереди единиц работы.

Однако, если вы хотите сделать фоновый поток ожидающим, как в шаблоне производителя-потребителя, тогда вы, возможно, можете использовать ManualResetEvent или Semaphore и попросите свой поток ждать, пока объект станет сигналом. Когда событие сигнализируется, поток может возобновиться, и потребляет, что бы он ни потреблял, а затем снова ложиться спать, пока не появится больше дел.

1

объекты могут работать только один раз.
Если вы хотите запустить его снова, вам нужно создать new Thread.

+0

@ +1 для 'объектов потока можно запускать только один раз'. –

+0

Редактировал неверный комментарий. –

Смежные вопросы