Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
ВнизTimer Найти похожие ветки
← →
atmospheric (2002-09-19 23:01) [0]У таймера стоит интервал 1. Timer1.Interval := 1;
в событии OnTimer
inc(count);
те через 5 секунд count должен быть равен 5000 ? или что то не так, когда прохдит больше времени то он показывает другие цифры, совсем не похожие на пройденое время ?
Или как то это число надо преобразовывать ?
← →
Smiths (2002-09-19 23:05) [1]Таймер от Борланда не справляется с таким микроскопическим интервалом.
← →
MBo (2002-09-19 23:05) [2]таймер windows не способен выдавать такие промежутки времени (1 миллисекунда). Реально - десятки мс.
timeSetEvent получше
← →
Smiths (2002-09-19 23:07) [3]
> MBo © (19.09.02 23:05)
По-моему, не менее 50 миллисекунд.
← →
MBo (2002-09-19 23:09) [4]>Smiths
да, 55
← →
atmospheric (2002-09-19 23:20) [5]хм сейчас сделал тест: 2 таймера, у одного интервал 1 у вторго 1000,
так вот и тот и другой делают инкремент. и показатели у них одинаковые.
Но в другой програме с интервалом 1 иногда происходят ошибки :(
может он ошибается из-за такова количества кода выполняемого в 1мс.
procedure TForm1.Timer1Timer(Sender: TObject);
var
SL: TStringList;
b,e: byte;
begin
//ИНТЕРВАЛ 1 МилиСЕКУНДА
Memo1.Text := GetWindText(HNDLRe);
SL := TStringList.Create;
SL.Text := GetWindText(HNDLRe);
Edit1.Text := SL.Strings[SL.Count-1];
Stroka := SL.Strings[SL.Count-1];
SL.Free;
e := pos("<",Stroka);
b := pos(">",Stroka);
if (e > 0) and (b > 0) then
Nick := copy(Stroka,e+1,b-e-1);
IF PLAY = TRUE THEN
BEGIN
if pos(QA[2], Stroka) > 0 then
if pos(BOT_NICK, Stroka) = 0 then
if YHT = true then // RUN MAIN Logs;
if pos("!start", Stroka) > 0 then
Start;
if pos("!stop", Stroka) > 0 then
Stop;
if pos("!hint", Stroka) > 0 then
Hint;
inc(MS);
END;
if pos("!help", Stroka) > 0 then
SendQuestion(ABOUT_ST);
if pos("!open", Stroka) > 0 then
if Nick = ADMIN_NICK then
begin
PLAY := true;
Table1.Active := true;
SendQuestion(REKLAMA_ST);
SendQuestion(OPEN_ST);
end;
if pos("!close", Stroka) > 0 then
if Nick = ADMIN_NICK then
begin
PLAY := false;
Table1.Active := false;
SendQuestion(REKLAMA_ST);
SendQuestion(CLOSE_ST);
end;
← →
Юрий Зотов (2002-09-19 23:56) [6]Стандартный таймер заставляет систему посылать сообщение WM_TIMER с указанным интервалом. Сообщение это встает в общую очередь, выбирается из нее в общем порядке и далее обрабатывается Вашим кодом.
Теперь подумаем.
А если одно из предыдущих сообщений наша программа обрабатывает, например, полчаса? Что будет?
Будет то, что следующее сообщение таймера выберется из очереди и обработается примерно через эти полчаса. Хотя интервал у таймера может стоять, скажем, 100 мс.
А если в тот момент, когда надо послать сообщение, система занята чем-то другим? Что будет?
Примерно то же самое. С той лишь разницей, что погрешность здесь будет, конечно, не полчаса, а доли секунды. Но все равно будет.
Не говоря уже о квантовке потоков (те самые 55 мс), приоритетах и прочем.
Стандартный таймер Windows (а на нем построен дельфишный TTimer) - штука неточная. Он просто не предназначен для точного отсчета малых интервалов времени. Посмотрите в справке API мультимедийные таймеры (топик "Multimedia Timer Reference") - они работают намного точнее.
А вообще, сама Windows вряд ли годится для отслеживания интервалов времени порядка 1 мс.
← →
kex86 (2002-09-20 01:36) [7]Все таймеры подобного типа в виндоусе работают с промежутком времени кратным 10 мс (NT, 2000, XP) или 55 мс (95, 98, МЕ). То есть если в в ХР поставите интервал 1, то будет 10;
11 - 20, 21 - 30, а в МЕ еще хуже
Чтобы использовать меньшие промежутки времени, надо использовать MediaTimer;
Кстати, интервал 10 или 55 (в зависимости от виндоуса) обзывается тиком системы
← →
REA (2002-09-20 10:27) [8]Windows по определению не система реального времени. Т.е. жестких правил выполнения кода у нее нет - выполнилось и хорошо. Достаточно сказать, что системные часы имеют право ходить с точностью +-1 минута и синхронизируются раз в час. Можно конечно поднять приоритеты до критических и повесить все на нитку, но гарантий все-равно никаких.
← →
BOA_KAA (2002-09-20 10:29) [9]Если я не ошибаюсь, то таймер из GLScene несколько точнее, чем обычный...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c