Что нового

Загруженность процессора в While со Sleep() и без Sleep() (Почему разница?)

RavdonikaS

Новичок
Сообщения
62
Репутация
3
Нужно было подсмотреть в справке пример подобного скрипта Запустил и с удивление обнаружил что от примера из справки процессор вообще не нагружается а мой примерно похожий кусок скрипта грузит процессор на 40-50%
Начал сравнивать искать в чем разница и обнаружил что если есть задержка хотя бы в 1 миллисекунду Sleep(1) то нет такой нагрузки
Вопрос: может кто объяснить почему такая огромная разница даже от крошечной задержки?
Код:
#include <Misc.au3>
Local $hDLL = DllOpen("user32.dll")
While 1
    If _IsPressed("10", $hDLL) Then
        ConsoleWrite("_IsPressed - Нажата клавиша Shift." & @CRLF)
        ; Цикл ожидания, пока клавиша не будет отпущена.
        While _IsPressed("10", $hDLL)
            Sleep(250)
        WEnd
        ConsoleWrite("_IsPressed - Отпущена клавиша Shift." & @CRLF)
    ElseIf _IsPressed("1B", $hDLL) Then
        MsgBox(4096, "_IsPressed", "Нажата клавиша Esc, поэтому скрипт завершает работу.")
        ExitLoop
    EndIf
;~     Sleep(250)                <<<<================= Эта строка если Есть и если её Нет
WEnd
DllClose($hDLL)


Sleep.jpg

NoSleep.jpg
 

hedji

Продвинутый
Сообщения
403
Репутация
83
Если кратко "на пальцах":
Процессор быстро выполнил основное тело скрипта и пошел спать/решать другие задачи, через 250мс вернулся, снова быстро выполнил и снова отдыхает, нагрузки почти нет.
Без Sleep процессор постоянно выполняет основное тело скрипта, не останавливаясь, и старается выполнять как можно быстрее + должен переключаться на другие задачи ОС, отсюда и нагрузка.
 
Автор
RavdonikaS

RavdonikaS

Новичок
Сообщения
62
Репутация
3
hedji Спасибо примерно понятно
 
Верх