Я тут такой "велосипед" проверил :
- Код: Выделить всё
procedure TForm1.TimeSleep ;
Var
StartTime:QWord;
begin
StartTime:=GetTickCount64;
While GetTickCount64-StartTime<5000 do
begin
Application.ProcessMessages;
end;
mainform.panel7.Caption:=' Терминал';
end;
...
procedure TForm1.Timer3Timer(Sender: TObject);
begin
...
// Типа "отложенная задержка" не тормозящая исполнение программы.
// Что для обработчика таймера очень критично .
TThread.Queue (nil, TimeSleep );
...
end;
Зы
Почти квантовая механика с ее знаменитым "отложенным выбором ".
Application.ProcessMessages; можно было не вызвать а поставить Sleep (100) но я не решился ( как я понял TThread.Queue () "вырывает" исполнение TimeSleep из основного потока программы но черт его знает в каком контексте он выполняется . Не хватало еще ядро оси повесить ) . А так вроде работает и не тормозит таймер.
Особый прикол несколько вызовов TThread.Queue подряд (По идее поток программы "проскочит дальше", а коды в вызываемых процедурах "станут в очередь" вроде возможно "параллельное исполнение" однако реально новый поток не создается, а просто используется некий "другой" ( возможно родительский например проводника ) )