Существует опция поместить вводную изогнутую фигурную скобку и точку с запятой автоволшебно в "корректном" положении. Необходимо будет включить, это - Выбирает Window/Preferences и вводит "фигурную скобку" в поле поиска - должно быть легко findable (никакое затмение на этом компьютере). Эффект:
(" |" курсор):
if(i==0|)
ввод "{" теперь приведет к
if(i==0) {|
Sleep ()
реализован на уровне ОС. Процессор не вращается, когда задача / поток / процесс спят. Этот конкретный поток помещается в очередь ожидания (поток не готов к запуску) до тех пор, пока не истечет время, после которого поток будет помещен в очередь готовности к запуску.
Тем временем другие потоки, которые находятся готов к запуску, будет запущен.
Только если ни один поток не готов к запуску, ОС перейдет в неактивный поток, который обычно выдает инструкции для выключения (или в любом случае переводит в состояние низкого энергопотребления) процессор до тех пор, пока аппаратное происходит прерывание.
Только для очень простой системы (например, самой простой из встроенных систем) Sleep ()
может быть реализован как не более чем цикл ожидания при занятости.
Любая операционная система учебник, например "
Ответ на ваш вопрос полностью зависит от операционной системы и реализации.
Простой способ думать об этом: когда вы вызываете sleep ()
, ОС вычисляет время пробуждения, а затем помещает ваш процесс куда-то в очередь с приоритетом. Затем он просто не планирует ваш процесс, чтобы получить какое-либо время выполнения, пока не пройдет достаточно реального времени, чтобы он был вытянут из очереди.
В типичной операционной системе спящий режим вызывает ядро, которое заставляет процесс ждать, пока не пройдет заданное время, а затем переходит и находит другой процесс для выполнения. Если нечего делать, он запустит «процесс ожидания». По истечении времени планировщик отметит, что процесс ожидания готов, и он снова запланирует его.
Вы не выполняете никаких циклов while, иначе система не сможет ничего сделать - не будет реагировать на мышь, клавиатуру, сеть и т. Д.
Обычно наиболее оперативные системы: вы добавляете задержку к текущей метке времени, чтобы получить метку времени, когда задача, которая запросила задержку, будет возобновлена (при условии, что в это время не запущена задача с более высоким приоритетом), и добавьте [wakeupTimestamp, указатель задачи] в список который отсортирован по возрастанию по отметке времени. После этого ОС выполняет переключение контекста и запускает следующую доступную задачу. Периодически система сравнивает самую раннюю отметку времени в спящем списке с текущей отметкой времени, и, если крайний срок прошел, она перемещает спящую задачу в очередь «готовых» задач.
Sleep блокирует вашу задачу / поток на время, прошедшее с момента передачи. . Ваша задача становится невыполнимой в течение этого периода или до тех пор, пока не произойдет что-то еще интересное (например, сигнал), в зависимости от того, что произойдет раньше.
Нередко спящий режим вызывает select () и не передает никаких дескрипторов для ожидания и значение тайм-аута. равный вашему периоду сна.
Система может реализовать это, установив таймер, истекающий по истечении прошедшего времени, а затем ожидая семафор, который будет сигнализировать, когда этот таймер истечет. Таким образом, он заблокирован на этом семафоре.