Влияет ли Thread.Sleep на ThreadState? - PullRequest
2 голосов
/ 09 июня 2009

Если я создаю и запускаю поток, как вызов Thread.Sleep (x) в этом потоке влияет на состояние ThreadState (если оно вообще существует)?

Спасибо!

Ответы [ 5 ]

4 голосов
/ 09 июня 2009

ThreadState определяет набор всех возможные состояния выполнения для потоков. Как только поток создан, он находится в хотя бы одно из состояний пока завершается. Темы, созданные в общеязыковая среда выполнения изначально в незапущенном состоянии, в то время как внешний потоки, которые входят в среду выполнения уже в рабочем состоянии. Незапущенная тема переходит в рабочее состояние, вызвав Start. Не все комбинации ThreadState значения действительны; например, нить не может быть в обоих прервана и незапущенные состояния.

Важно : состояние потока представляет интерес только для нескольких отладок сценарии. Ваш код никогда не должен использовать состояние потока для синхронизации деятельность потоков.

ThreadState: WaitSleepJoin : поток заблокирован в результате вызова функции Wait, Sleep или Join.

С здесь .

4 голосов
/ 09 июня 2009

С MSDN

WaitSleepJoin Тема заблокирована. Это может быть результатом вызова Thread.Sleep или Thread.Join, из запрос блокировки - например, вызывая Monitor.Enter или Monitor.Wait - или ожидания в потоке объект синхронизации, такой как ManualResetEvent.

Краткий ответ: Да!

3 голосов
/ 09 июня 2009

Я не хочу, чтобы это прозвучало как саркастический ответ, поскольку это никому не поможет, поэтому, пожалуйста, примите это в том духе, в котором оно было задумано.

Вы пытались создать простое приложение winform с кнопками для запуска, остановки и спящего потока и области состояния, чтобы показать значение thread.ThreadState?

Это ответит на ваш вопрос.

Если вы собираетесь проголосовать "против", объясните хотя бы почему. Все, что я пытаюсь предложить, это то, что люди немного экспериментируют, прежде чем отправлять вопросы. Если их эксперименты не отвечают на их вопросы, они могут спросить здесь с доказательствами того, что они уже попробовали.

1 голос
/ 09 июня 2009

Поток должен быть помещен в ThreadState.WaitSleepJoin.

Подробнее см. Документация ThreadState , в частности:

WaitSleepJoin: "Поток заблокирован. Это может быть результатом вызова Thread .. ::. Sleep или Thread .. ::. Join, запроса блокировки - например, путем вызова Monitor .. ::. Введите или отслеживайте .. ::. Wait - или ожидание объекта синхронизации потока, такого как ManualResetEvent. "

1 голос
/ 09 июня 2009

Переходит к WaitSleepJoin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...