Delphi: TTimer (upd)
Создать доп. поток, из под которого и дергаться с нужным периодом.
В DelphiX есть компонент "быстрый таймер".
По-моему лучше слать из того другого треда в основной message. Это так сказать стиль виндового мультитрединга, вся синхронизация унесена в ОС.
да, можно и так - если позволяет задача.
unit Unit2;
interface
uses SysUtils, Classes;
type
TFastTimerProc = procedure of object;
TFastTimer = class(TThread)
protected
procedure Execute; override;
public
Interval : TDateTime;
OnTimer : TFastTimerProc;
end;
implementation
{ TFastTimer }
procedure TFastTimer.Execute;
var
LastExec : TDateTime;
begin
LastExec:=Time;
while not Terminated do
begin
if Time-LastExec>Interval then
begin
LastExec:=Time;
OnTimer;
end;
end;
end;
end.
Быстрее 64 не получилось. другие соображения?
Есть другие методы вычисления времени, с точностью до 1 мс (а не 15мс, как в случае Time)?
QueryPerformanceFrequency
targon жаловался, что в 9х таймер дискретно работает, а в НТ все нормально.
какая система? недавно Win2003/Win2000
О! Заработало. спасибо большое!
Лучше вообще-то ставить Sleep чем в активном цикле тут наворачивать...
Можешь грамотно обосновать?
Потому что ты ничего не делая, загружаешь при этом процессор на 100%
Sleep спит 1 мс => будет щёлкать 1000 раз.
Sleep спит 2 мс => будет щёлкать 500 раз.
Есть возможность щёлкать равномерно 700 раз в секунду не нагружая процессор на 100%?
Можешь намекнуть, что за задача стоит перед тобой?
ps
Во время прокрутки цикла можно делать Sleep(0) - если есть "горячий" поток, то управление будет передано ему
Оставить комментарий
yolki
Срабатывает не быстрее 64 раз в секунду.Interval = 1.
С чем связано и как можно получить хотя бы 200 раз в секунду?
На форме Timer (disabled) , Edit, Button..