|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.12.2012, 23:55 | #1 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
Мультимедийный таймер в Дельфи
Приветствую
Вот обозначилась проблема. Работаю с мультимедийным таймером. Задается так: TimeFinished:=false; MMTimer1 := timeSetEvent(timer*1000,0,@MyTimerC allBackProg,100,TIME_ONESHOT); Тело функции Procedure MyTimerCallBackProg(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall; begin Timefinished:=true; end; Суть в том что, в процессе работы таймера по определенному условию надо остановить и убить таймер, и запустить его внось с другим значением timer Все компилится. Но проблема в том что после повторного попадания на mmtimer1:=timesetevent.... и после выполнения данной функции переменная Timefinished сразу становиться True хотя перед повторным запуском таймера переменная принудительно делается False Может я неправильно убиваю\останавливаю таймер? Помогите пожалуйста советом. |
27.12.2012, 01:15 | #2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
KillTimer(MMTimer1) в конце.
|
27.12.2012, 01:29 | #3 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
Именно.
После killtimer у меня идет возврат на Timefinished:=false; timesetevent(...) далее while timefinished=false do ....... так вот уже на while переменная timefinished стоит как true такое впечатление что киллтаймером не убил таймер а остановил и когда его снова запускаю, он не сначала работает а дорабатывает первый цикл....=( |
27.12.2012, 01:35 | #4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
покажите весь код.
|
27.12.2012, 02:24 | #5 | |||
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
Работа с портом юсб на предмет данных в нем
Вот коллектор данных с порта Цитата:
И в итоге попадаем на код: Цитата:
и его запуска в начале посредством timesetevent переменная Timefinished тут же становится True и все ломается, потому что у меня сбор данных идет пока timefinished не станет True, а по замыслу он должен становиться тру либо по таймеру либо по окончании данных приходящих с юсб. код обработчика Цитата:
|
|||
27.12.2012, 02:32 | #6 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
Да. Забыл добавить что все это работает в потоке. Но не думаю что здесь проблемы с синхронизацией
|
27.12.2012, 02:34 | #7 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Как-то 1 раз написал и пользуюсь =)
Код:
Цитата:
|
|
27.12.2012, 02:52 | #8 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
А можно у Вас попросить простой пример использования и вашего класса и связки TEvent и WaitForSingleObject
Я просто не все еще оч хорошо понимаю.... вникаю. Спасибо за помощь =) |
28.12.2012, 02:25 | #9 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 20
|
Победил. Своими же средствами=) Глупая ошибка как всегда.
В моей процедуре опроса в теле while все работало отлично. Но закралась маленькая ошибка. Идентификатор таймера я убивал практически в конце процедуры, и в итоге по определенным условиям, я запускал еще один таймер, с другим идентификатором, но с той же процедурой обработчиком. В итоге и получилось глупое наложение. Установка timekillevent сразу после тела while сразу решила проблему. Таймер стал прекрасно и останавливаться и перезапускаться как мне надо. Спасибо за помощь и интересный вариант таймера "Человек Борща" |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
таблицы подстановок в дельфи(базы данных в дельфи) | ManiagoZ | БД в Delphi | 0 | 15.05.2011 15:07 |
Мультимедийный конспект | TMAX | Помощь студентам | 3 | 08.11.2009 12:10 |
не могу запустить мультимедийный курс | vasypupkin | Общие вопросы по Java, Java SE, Kotlin | 6 | 16.05.2009 20:54 |
Мультимедийный Обучающий Курс TeachPro Java Для Начинающих | mihali4 | Общие вопросы по Java, Java SE, Kotlin | 3 | 04.11.2008 05:39 |