Нитки.Режим сна c#.NET

#c# #.net #multithreading

#c# #.net #многопоточность

Вопрос:

Я хочу перевести поток в спящий режим, и у меня нет метода sleep.

Я использую System.Threading .

В своем коде я пишу :

 Thread t = new Thread(StartPointMethod);
t.
  

В списке методов нет режима ожидания….

В чем может быть проблема?

Комментарии:

1. какая из версий отличается .. иногда это может быть проблемой с intellisence

2. у меня есть vs2008 с пакетом обновления 1 @Sudantha

3. То, что вы хотите. Вы хотите перевести текущий поток в спящий режим? Или вы хотите перевести поток из другого потока в спящий режим.

4. Можете ли вы объяснить, почему вы хотите это сделать? Перевод потока в спящий режим часто является действительно плохой идеей. Вероятно, есть лучший способ сделать то, что вы хотите.

5. @olia: Если вы хотите что-то сделать с определенным интервалом, используйте таймер. msdn.microsoft.com/en-us/library/system.threading.timer.aspx

Ответ №1:

Этот код для перехода текущего потока в режим ожидания на 20 секунд.

 System.Threading.Thread.Sleep(20000);
  

Комментарии:

1. t.Join(20000) не переводит другой поток в спящий режим. Он просто ожидает завершения другого потока в течение 20 секунд. Если поток не завершается в течение этого периода, Join возвращается, но другой поток не затронут.

Ответ №2:

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

 System.Threading.Thread.Sleep(500);
  

Ответ №3:

Sleep — это статический метод в «потоке», а не метод экземпляра. Итак, способ перевести поток в спящий режим — это создать поток.Оператор Sleep внутри этого метода выполнения.

Начиная с потока.Режим сна всегда переводит выполняющийся поток в спящий режим, вы можете сделать что-то в строке примера ниже.

     private void Foo()
    {
        Thread t = new Thread(new ThreadStart(ThreadWorker));
        t.Start();

        t.Join();
    }

    private void ThreadWorker()
    {
        Console.WriteLine("Prior to sleep");
        Thread.Sleep(100);
        Console.WriteLine("After sleep sleep");
    }
  

Комментарии:

1. Спасибо за подробное объяснение потока. Переход в спящий режим применяется к текущему потоку, в котором вы находитесь.

Ответ №4:

У потока A нет способа перевести поток B в спящий режим. То есть вы не можете написать:

 Thread t = new Thread(...);
t.Start();
t.Sleep();
  

Вы можете приостановить поток, а затем возобновить его позже, но это очень плохая идея. Это чревато всевозможными потенциально катастрофическими последствиями. Есть причина, по которой Thread.Suspend это устарело.

В обычном коде (т. Е. за пределами написания отладчиков и прочего на уровне операционной системы) никогда не бывает веской причины для приостановки потока. И почти никогда не бывает веской причины для вызова Thread.Sleep . Если вы обнаружите, что вам нужно приостановить или перевести поток в спящий режим, почти наверняка существует проблема с дизайном, которую вам необходимо решить.

Ответ №5:

вы должны использовать этот код :

 Thread.Sleep(5);
  

Ответ №6:

Просто чтобы немного расширить (правильные) ответы выше, Thread.sleep — это статический метод. Статические методы связаны с классом (потоком), но не с конкретным экземпляром класса.

Итак, чтобы вызвать поток.Спящий режим — вы просто пишете (как было сказано выше) «Поток.Режим сна (мсек)» — вам не нужно создавать поток для вызова метода.

Ответ №7:

Нитки.Режим ожидания (миллисекунды) позволяет текущему потоку находиться в режиме ожидания в течение x количества миллисекунд. Поток не может перевести другой поток в спящий режим. Нитки.Режим ожидания всегда относится к текущему потоку.

Комментарии:

1. Ваш ответ не добавляет ничего, что еще не было предложено в многочисленных старых ответах.

Ответ №8:

Система.Поток имеет функцию, специально созданную для этого.

 System.Threading.Thread.Sleep(100)
  

Функция режима ожидания принимает один аргумент в миллисекундах.