| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 всё работает, но ведь "продергивает" изображение, собака |
| Автор: Alexeis 2.11.2006, 15:21 |
| Toboom, Ой так это мультимедийный!!! Тогда все ясно. Это обычное дело. Таймер работает во втором дополнительном потоке, потому необходима синхронизация доступа к общей памяти главного и таймеровского потоков. |
| Автор: Toboom 2.11.2006, 17:38 |
| О! Что-то становится понятно. А нельзя ли меня направить на какой-то ресурс, чтобы я - малограмотный - въехал как их засинхронизировать. Заранее благодарен. |
| Автор: Toboom 2.11.2006, 18:48 |
| Крайне признателен за информацию. В принципе, надо корректно всё переписать через критические секции, но оказалось достаточным сделать Lock обоих используемых Canvas. Ну и разлочить соответсвенно. |