Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для aenye
304 / 186 / 45
Регистрация: 05.07.2018
Сообщений: 580

Thread.Sleep под капотом

20.05.2019, 01:56. Показов 2436. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Собственно, весь вопрос в описании темы. Погуглил - мало информации и никакой конкретики. Точнее, она есть, но не в качестве ответа на мой вопрос.

Задался вопросом - соответствует ли приостановка потока на время использованию, своего рода, системного таймера?
И если это так, какие преимущества по оптимизации данный таймер имеет перед обычным?
И еще одна теория/вопрос: по логике приостановленный поток не должен занимать ресурсы. Но если работает таймер, который считает время до начала возобновления потока, получается этот таймер жрет ресурсы (хоть и очень мизерную их часть)? При этом таймер выполняется в этом же потоке...?
Короче, что-то меня повело с этими таймерами, но это единственный способ организовать приостановку потока под капотом, который пришел мне в голову.

Расскажите, кому не лень, про вот это вот все.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2019, 01:56
Ответы с готовыми решениями:

Как использовать Thread.Sleep(5000), ошибка: "Элемент "Thread" не существует в текущем контексте"
я так понимаю, что Thread.Sleep(5000); это "тормоз" процесса выполенения программы на 5 сек? А как его правильно инициализировать и...

Thread.Sleep
Итак, есть примерно вот такой консольный код: static void Main(string args) { int i = 0; Menu(i); ...

NULL под капотом
Сегодня увидел для себя кое что новое и вот не знаю даже как это гуглить))) Может кто знает "как это работает" и просто...

3
Эксперт .NET
 Аватар для Rius
13164 / 7724 / 1679
Регистрация: 25.05.2015
Сообщений: 23,535
Записей в блоге: 14
20.05.2019, 06:17
Лучший ответ Сообщение было отмечено Usaga как решение

Решение

Цитата Сообщение от aenye Посмотреть сообщение
Задался вопросом - соответствует ли приостановка потока на время использованию, своего рода, системного таймера?
Вполне.
Цитата Сообщение от aenye Посмотреть сообщение
И если это так, какие преимущества по оптимизации данный таймер имеет перед обычным?
Обычный - это какой? Внутри используется Sleep из WinAPI.
Цитата Сообщение от aenye Посмотреть сообщение
И еще одна теория/вопрос: по логике приостановленный поток не должен занимать ресурсы. Но если работает таймер, который считает время до начала возобновления потока, получается этот таймер жрет ресурсы (хоть и очень мизерную их часть)? При этом таймер выполняется в этом же потоке...?
Системный таймер работает всегда. Ваш таймер не занимает ресурсы, потому что не он выполняется, а сама задача снимается с выполнения планировщиком задач.
Цитата Сообщение от aenye Посмотреть сообщение
Короче, что-то меня повело с этими таймерами, но это единственный способ организовать приостановку потока под капотом, который пришел мне в голову.
Убить спящий поток
Прервать ожидание Thread.Sleep
1
 Аватар для aenye
304 / 186 / 45
Регистрация: 05.07.2018
Сообщений: 580
20.05.2019, 07:38  [ТС]
Rius, не совсем понял, к чему тут 2 темы про отмену потоков? Это уже давно прочитано и не интересно. Спасибо за ответ про таймер, но вопрос был несколько глубже (возможно, я нечетко его сформулировал).
Так вот, интересует сам механизм приостановки потока. Что происходит при вызове thread.sleep()?
Куда будут переданы эти милисекунды задержки, что и где их будет считать, и кто оповестит поток по истечении указанного времени?

Под обычным подразумевал таймер winapi, этот вопрос снят.
0
Эксперт .NET
 Аватар для Rius
13164 / 7724 / 1679
Регистрация: 25.05.2015
Сообщений: 23,535
Записей в блоге: 14
20.05.2019, 07:59
Цитата Сообщение от aenye Посмотреть сообщение
не совсем понял, к чему тут 2 темы про отмену потоков?
Это способы приостановки потоков.

Цитата Сообщение от aenye Посмотреть сообщение
Что происходит при вызове thread.sleep()?
Куда будут переданы эти милисекунды задержки, что и где их будет считать, и кто оповестит поток по истечении указанного времени?
Читайте по первой ссылке о WinAPI.

Также добавлю, что типичный интервал системного таймера где-то 15.6 мс. Его можно немного уменьшить: Странное поведение Thread.Sleep

Добавлено через 12 минут
Постановка задачи на ожидание - одна из функций планировщика задач любой операционной системы.
По планировщику задач Windows можете почитать тут: Processes, Threads, and Jobs in the Windows Operating System By Mark E. Russinovich and David A. Solomon. Там 9 страниц, не пропустите листалку.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2019, 07:59
Помогаю со студенческими работами здесь

Thread.Sleep и lock
Что будет если вызвать Thread.Sleep() внутри блока кода lock?

Thread.Sleep не работает
Всем привет! Задача такая есть таймер который запускается каждый 30 сек и делает рассылку и уведомление Но когда наступает время (1 мин...

Странное поведение Thread.Sleep
Забавно, уже не первый раз встречаю такую вещь: делаю движение контрола по форме в цикле (самостоятельно, или по нажатым клавишам). Чтобы...

ProgressBar связать с thread.sleep
как получать progressbar.Value в случае когда стоит задержка в 10 секунд и надо в прогресс бар показывать сколько секунд от 10 уже?или...

Аналог Thread.Sleep в Task
Имеется пример который запускает пару потоков с задержкой. using System; using System.Collections.Generic; using System.Linq; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru