#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)
Функция режима ожидания принимает один аргумент в миллисекундах.