Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-98264
MazaFaka
2002-08-31 16:48
2002.09.30
Что это?


4-98401
Pavel_S
2002-08-14 14:50
2002.09.30
Прозрачность формы и текст


1-98209
Losyara
2002-09-18 16:38
2002.09.30
OLE Automation для Excel


14-98279
Aleksey Pavlov
2002-09-02 13:36
2002.09.30
Фотографии со второй встречи Мастаков в Москве.


4-98413
Карлсон
2002-08-14 01:17
2002.09.30
Out of Memory !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский