Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Проблема использования таймера из MMSystem


Автор: Toboom 2.11.2006, 14:47
Народы!
Создаю таймер
TimerID[I]:=TimeSetEvent(TimerInterval, 0, @TimeProc1, 0, TIME_PERIODIC);

Внутри обработчика TimeProc1 среди остального делается копирование
Canvas.CopyRect(MRD, FBmp.Canvas, MRS) 
из BMP-хи.
Так вот достаточно часто, но не всегда из этой самой BMP-хи копируется
черти что, а не то, что в ней есть.
Т.е. будто иногда в обработчике таймера мы попадаем в какое-то иное адресное пространство или
иной какой глюк происходит.
Может кто сталкивался с подобным и догадывается чего делать?

Заранее благодарен.

Автор: Alexeis 2.11.2006, 14:51
Toboom, А с компонентом TTimer тоже такая беда?

Автор: Toboom 2.11.2006, 15:03
В том-то и дело, что такая беда только с таймером
из MMSystem. C Ttimer всё работает, но ведь "продергивает" изображение,
собака smile))

Автор: Alexeis 2.11.2006, 15:21
Toboom, Ой так это мультимедийный!!!
Тогда все ясно. Это обычное дело. Таймер работает во втором дополнительном потоке, потому необходима синхронизация доступа к общей памяти главного и таймеровского потоков.

Автор: Toboom 2.11.2006, 17:38
О! Что-то становится понятно.
А нельзя ли меня направить на какой-то ресурс, чтобы я - малограмотный - въехал 
как их засинхронизировать.
Заранее благодарен.

Автор: Alexeis 2.11.2006, 17:45
Цитата(Toboom @  2.11.2006,  17:38 Найти цитируемый пост)
А нельзя ли меня направить на какой-то ресурс, чтобы я - малограмотный - въехал 

Сейчас я тему целиком переправлю в Delphi: WinAPI и системное программирование

Добавлено @ 17:50 
Цитата(Toboom @  2.11.2006,  17:38 Найти цитируемый пост)
как их засинхронизировать.

Проще всего использовать критические секции. 
Можно почитать тут
http://forum.vingrad.ru/index.php?showtopic=60076

Автор: Toboom 2.11.2006, 18:48
Крайне признателен за информацию.
В принципе, надо корректно всё переписать через критические секции, но
оказалось достаточным сделать Lock обоих используемых Canvas. Ну и разлочить
соответсвенно. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)