Таймер - страница 4

 

Чтобы диапазон событий OnTimer был меньше секунды.

И иметь возможность замерять какие-нибудь процессы в миллисекундах.

Идею с " ...(int задержка=0)" я вообще ни как не понял, потому и написал что хрень.

 
Yedelkin:
Как вы и поняли, в данном случае у меня девиз: "Долой любые мизеры, если можно обойтись и без них". Стоит только на уровне терминала разрешить задержку генерирования первого события Timer на выбранное пользователем время. При этом значимость Вашего кода никак не умоляю, тем более, что его попросту не видел.

Как Вы представляете себе организацию задержки первого события от таймера?

В терминале будет запущен такой же секундный таймер и в определённый момент начнут генерироваться события таймера для эксперта. Всё абсолютно то же самое, что я уже предложил.

 
stringo:

Как Вы представляете себе организацию задержки первого события от таймера?

В терминале будет запущен такой же секундный таймер и в определённый момент начнут генерироваться события таймера для эксперта. Всё абсолютно то же самое, что я уже предложил.

Так и представляю. Обнаружив в OnInit() функцию EventSetTimer(14400, 7029), терминал активизирует внутренний секундный таймер и выдаст первое событие Timer ровно через 7029 секунд после запуска программы (допустим, в 12-00), как и пожелал пользователь. Далее события  Timer будут генерироваться с периодичностью раз в четыре часа. Одно событие за 4 часа, а не 14400 событий, где 13399 событий Timer никакой смысловой нагрузки для пользователя не несут.

Такой подход, на мой взгляд, кардинально отличается от того, что предложили Вы. Потому что в моём варианте внутренний секундный таймер (отсчитывающий 7029 секунд) проработает только ограниченное время после инициализации эксперта, и прекратит свою работу, не засоряя при этом очередь событий. Ваш же вариант предусматривает непрерывную генерацию ежесекундных событий, с первой и до последней минуты работы эксперта, из которые только каждое 14400-ое событие будет иметь для пользователя хоть какой-то вес.
 
pusheax:

Чтобы диапазон событий OnTimer был меньше секунды.

И иметь возможность замерять какие-нибудь процессы в миллисекундах.

Вообще-то нынешний параметр "int  seconds      // количество секунд" определяет периодичность возникновения событий от таймера, а не какие-то там "задержки для OnTimer". Учите матчасть. Что касается миллисекунд, то Вы хотя бы прочитали для начала первую страницу темы.

pusheax:

Идею с " ...(int задержка=0)" я вообще ни как не понял, потому и написал что хрень.


 Понятно. Из серии "Лишь бы ляпнуть, не разобравшись". Ничего, бывает :)  Все мы иногда стремимся поделиться с окружающими своим видением прекрасного.

 
Yedelkin:

Так и представляю. Обнаружив в OnInit() функцию EventSetTimer(14400, 7029), терминал активизирует внутренний секундный таймер и выдаст первое событие Timer ровно через 7029 секунд после запуска программы (допустим, в 12-00), как и пожелал пользователь. Далее события  Timer будут генерироваться с периодичностью раз в четыре часа. Одно событие за 4 часа, а не 14400 событий, где 13399 событий Timer никакой смысловой нагрузки для пользователя не несут.

Такой подход, на мой взгляд, кардинально отличается от того, что предложили Вы. Потому что в моём варианте внутренний секундный таймер (отсчитывающий 7029 секунд) проработает только ограниченное время после инициализации эксперта, и прекратит свою работу, не засоряя при этом очередь событий. Ваш же вариант предусматривает непрерывную генерацию ежесекундных событий, с первой и до последней минуты работы эксперта, из которые только каждое 14400-ое событие будет иметь для пользователя хоть какой-то вес.

 

Ok

В функции OnInit запустите таймер EventSetTimer(7029);

В функции OnTimer по первому приходу отключите предыдущий таймер EventKillTimer() и запустите новый таймер EventSetTimer(1440);

 
stringo:

В функции OnTimer по первому приходу отключите предыдущий таймер EventKillTimer() и запустите новый таймер EventSetTimer(1440);

А оно нормально работать будет? Кто-то не так давно говорил, что функция EventSetTimer предназначена по сути для однократного вызова из инита.
 
stringo:

Ok

В функции OnInit запустите таймер EventSetTimer(7029);

В функции OnTimer по первому приходу отключите предыдущий таймер EventKillTimer() и запустите новый таймер EventSetTimer(1440);

О, свет в конце тоннеля! Вызвать EventSetTimer() внутри самой OnTimer()? Обязательно попробую, как до терминала доберусь. Спасибо за изящное решение!
 
TheXpert:
А оно нормально работать будет? Кто-то не так давно говорил, что функция EventSetTimer предназначена по сути для однократного вызова из инита.
Я говорил. Это - обычное применение. Которое вовсе не отменяет экзотики (если вам так хочется)
 
stringo:

Ok

В функции OnInit запустите таймер EventSetTimer(7029);

В функции OnTimer по первому приходу отключите предыдущий таймер EventKillTimer() и запустите новый таймер EventSetTimer(1440);

Вот я так и делаю с древности.  Однако в тестере такой подход одно время не работал. Перешёл в тестере на счётчики.

Но это всё лирика.  Миллисекунды очень хочется. Присоединяюсь к пожеланиям. 

Мне сейчас временная дискретность нужна порядка 100 ms, но это именно сейчас приспичило, а что завтра приспичит я пока не в курсе. Не хотелось бы иметь столь высокий порог дискретности, 1000 ms - это как-то слишком толсто.  Миллисекунды - стандарт. Если кто-то сдуру очереди себе переполнит - это его трагедия  ( всегда есть масса весьма доступных способов грохнуть программу вместе с терминалом впридачу).  Как-нибудь  разберёмся чего можно и чего низя.  :)

 

Сейчас уже невозможно перейти на миллисекунды.

Сколько уже написанных экспертов начнут генерировать в 1000 раз больше событий таймера, чем предполагалось автором?