|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.05.2016, 00:21 | #1 |
Новичок
Джуниор
Регистрация: 08.05.2016
Сообщений: 2
|
DELPHI и мультимедиа таймер(ы) Windows
Я не программист, а электронщик-аппаратчик. Реализовал некий проект(с применением Delphi7), где станком с ЧПУ управляет самопальный контроллер(плата) на базе ATmega324P(RISC процессор) в режиме реального времени. Внешнюю связь с контроллером поддерживает комп с 32-разрядной ОС(WinXP или Win7) выполняющий роль терминала для связи оператора с контроллером через USB-COM адаптер. В программе на Delphi пришлось применить мультимедийный таймер (функция: timeSetEvent), который автоматически создает свой поток. Это понадобилось для связи компа с контроллером, дабы не возникал TimeOut (потеря связи с контроллером в течение некоего времени(доли секунды)).{Прошу прощения - это не единственный вариант решения "этого дела", но я выбрал этот вариант дабы не создавать свой уникальный поток}.
Все реализовано и все работает. Но сейчас, по прошествии некоторого времени у меня возникло 2 вопроса: 1. Что делал мультимедийный таймер Windows до того, как я его переинициировал в своей программе? 2. Возможно ли в своей программе запустить сразу несколько мультимедийных таймеров с разными задержками? Т.е. несколько раз применить функцию timeSetEvent для разных по времени таймеров одновременно работающих? (В MSDN об этом ничего не говорится). |
08.05.2016, 07:14 | #2 | |
Форумчанин
Регистрация: 23.01.2016
Сообщений: 608
|
1- ничего не делал, это виртуальный таймер.
2- можно. Но для того, чтобы мультимедийный таймер действительно работал с более высоким разрешением требуется перед его использованием задать timeBeginPeriod(), а после освободить timeEndPeriod(). При этом виртуальный таймер имеет просто более высокий приоритет выполнения своего потока. В MSDN как раз об этом говорится. Цитата:
|
|
09.05.2016, 19:32 | #3 | |
Новичок
Джуниор
Регистрация: 08.05.2016
Сообщений: 2
|
Цитата:
timeBeginPeriod() и timeEndPeriod() не использовал. Где-то читал, что они необходимы при перенастройке уже ранее запущенного таймера. Вероятно, что и для задания приоритета. Параметры моих тестовых вариантов таймеров: MMTimer1: = timeSetEvent(10,0,@MyProcTimer1,0, TIME_CALLBACK_FUNCTION or TIME_PERIODIC); MMTimer2:= timeSetEvent(20,timeGetMinPeriod,@M yProcTimer2,0, TIME_CALLBACK_FUNCTION or TIME_PERIODIC); MMTimer3:= timeSetEvent(100,10,@MyProcTimer3,0 , TIME_CALLBACK_FUNCTION or TIME_PERIODIC); Насчет USB-COM порта особых проблем нет, поскольку происходит обмен короткими пакетами по 20 байт из главного потока по системному таймеру. Если пакет утерян или искажен, то следует его повторная посылка (до 3-х раз подряд). Мой TimeOut это не из приложений для Windows, а свой собственный = 0,6 сек. Если контроллер в течение этого времени не получает пакетов от терминала(компа), то происходит необратимый разрыв связи со стороны контроллера с остановкой выполняемой им задачи (это мое решение). ММ-таймер в своем потоке на компе контролирует активность главного потока по изменению некоего счетчика отосланных пакетов. Если счетчик перестал изменяться, значит произошла приостановка главного потока (замер на некоторое время, по временным причинам). И тогда (в течение этого времени) ММ-таймер начинает отсылать контроллеру (и принимать) дежурные(незначащие) пакеты, чтобы контроллер понял, что терминал жив, а не сдох. Этот случай не универсальный, а просто приемлемый для узкой конкретной задачи. Тем более, что программы для компа и для контроллера писал я сам. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Таймер Windows Forms | one2s | Windows Forms | 4 | 25.04.2013 19:33 |
Windows таймер с точностью до микро(нано)секунд с callback-функцией. | Zarc | Общие вопросы C/C++ | 12 | 25.03.2013 16:07 |
Таймер (delphi) | Георгий Златов | Помощь студентам | 1 | 07.02.2012 21:02 |
Delphi 7 таймер | Seede1 | Помощь студентам | 4 | 11.10.2010 11:14 |
Таймер в delphi | SysSt | Помощь студентам | 5 | 21.04.2010 11:16 |