Замена к функции Sleep() чтобы программа не зависал.
Изначально как начинающий программист я в своём боте начал использовать функцию Sleep() между открытием коробок, выбросом , точкой вещей.
Но в момент паузы функции Sleep() окно программы зависало, что как говорится не приятно.
Покопался в сети и нашол решении этой проблемы.
Думал может быть кому пригодится.
Код:
Procedure Delay(mSec:Cardinal);
Var
TargetTime:Cardinal;
Begin
TargetTime:=GetTickCount+mSec;
While TargetTime>GetTickCount Do
begin
Application.ProcessMessages;
Sleep(1);
If Application.Terminated then Exit;
end;
End;
теперь вместо функции Sleep() используем Delay() и программа не будет зависать. Покра не мере я только что у себя проверил!
Источник [Ссылки могут видеть только зарегистрированные пользователи. ]
Тыкни спасибо если помог.
________________ PWA for PWPVP
Автор программы PwRuf - Bot и PwRuf - Crafter
Re: Замена к функции Sleep() чтобы программа не зависал.
Очевидно же, что Sleep приостанавливает работу потока, в котором выполняется, а поскольку вы все действия выполняете в потоке GUI, то и ваш GUI будет зависать от этого.
Все ресурсоёмкие действия следует выполнять в отдельном потоке.
Re: Замена к функции Sleep() чтобы программа не зависал.
Цитата:
Сообщение от rufat2005
While TargetTime>GetTickCount Do
begin
Application.ProcessMessages;
Sleep(1);
If Application.Terminated then Exit;
end;
Слишком толсто. Будет сильно жрать оперативу и/или процент загрузки ЦП.
Как вариант, можно через GetTickCount применить ещё один способ, но он скорее подойдёт для проверки нажатий клавиш в перерывах между "долгими" обработчиками этих нажатий. Но есть существенный минус - сложно всё это будет организовать. Плюс - нет Sleep, который многим так страшен.
Вывод: проще использовать отдельный поток, причём, если это бот, то для разных типов действий лучше даже создать несколько потоков.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3