|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.09.2016, 19:55 | #1 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Sleep - что внутри?
Бесконечный цикл со Sleep(1) почти не грузит процессор.
Что там такого зашито внутри? Как это можно реализовать кроме как через Sleep?
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
17.09.2016, 20:10 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Sleep(1) не сильно отличается от Sleep(50), точнее все что меньше системного таймера.
он ставит поток в спящее состояние, и планировщик потоков просто не дает ему кванта времени. это все на уровне ядра, вам там обычно делать нечего. насчет как реализовать, ничего не делать, спать)) зависит от того что вам нужно? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
17.09.2016, 22:39 | #3 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
А вам зачем?
Можно и самому CreateEvent WaitForSingleObject - с нужным тайм аутом SendMessage - посылаем сообщение о таймере в очередь сообщений. В виндоусе нет понятия спящего процесса как в линуксе. В место этого используется система приоритетов. Помимо основного круга есть ещё и служебный. Служебный круг как раз и нужен для обработки событий и очередей. Служебный круг вызывается не часто, делается это с частотой системного таймера. WaitForSingleObject проверяет тайм аут и если его нет отдаёт управление ОС. Отдача происходит скорее всего через ThreadSwitch()
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
17.09.2016, 22:50 | #4 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
17.09.2016, 23:29 | #5 | ||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Цитата:
А в виндоусе сам поток проверяет событие. Поэтому в виндоусе потоки не спят, они редко вызываются. А в линуксе спят, до тех пор пока не разбудят. Возможно принципиальной разницы в этом и нет. Просто хотел подчеркнуть, что работают малость по разному.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
||
17.09.2016, 23:40 | #6 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
PeekMessage - Ядро, а есть ли сообщения ко мне? где тут что сам поток проверяет события? Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
18.09.2016, 12:25 | #7 | |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Цитата:
EnterCriticalSection, как я понимаю, после определённого кол-ва циклов создаёт объект ядра и переходит в режим ожидания. Что именно он делает и вообще, оптимально ли это?
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
Последний раз редактировалось 7in; 18.09.2016 в 12:32. |
|
18.09.2016, 12:39 | #8 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
CreateEvent, это оптимально для ожидания. Критсекция все же для защиты ресурса, а не для ожидания. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
18.09.2016, 12:48 | #9 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 18.09.2016 в 12:53. |
|
18.09.2016, 14:05 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как доказать, что точка лежит внутри многоугольника? | NikiToZz_ | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 19.06.2016 12:16 |
Показывается, что часть диска занята, а внутри - Эта папка пуста | keen_ | Операционные системы общие вопросы | 11 | 15.10.2012 11:54 |
Обработка одномерных массивов, СИ. задание внутри, и написанный мною текст программы тоже внутри. кое-что нужно исправить.. | Амелия | Общие вопросы C/C++ | 6 | 02.04.2012 20:03 |
moc_mainwindow, а что внутри? | Farrel | Qt и кроссплатформенное программирование С/С++ | 3 | 09.06.2011 16:03 |
код проги внутри, что там не так??? | Gula1706 | Общие вопросы C/C++ | 1 | 18.12.2010 00:27 |