Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с таймером [D7, Win2k, WinXP]


Ботвин Дмитрий ©   (2005-10-07 13:45:00) 

Всем привет! У меня такая проблема: с помощью
mmResult:=timeSetEvent(5000, 0, @TimeCallBack, 0, 0) создаю таймер,

обработку события делаю так:
procedure TimeCallBack(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD); stdcall;
 begin
   timeKillEvent(mmResult);
   Form2.BeginPlay;
 end;

На процедуре BeginPlay приложение виснет. Если заменить на
обычный TTimer и в его обработчик событий вставить Form2.BeginPlay - всё работает.

Подскажите в чём проблема?


Digitman   (2005-10-07 15:59:00) [1]


> ньюанс


эт тоже наводит на мысль о чем-то новеньком, типа "нового ануса"))))


Digitman   (2005-10-07 15:57:00) [2]


> Может есть какой-то ньюанс у кулбэковской процедуры?


конечно есть !

читаем справку :

The multimedia timer runs in its own thread.

В отличие от других таймерных объектов системы ЭТОТ таймерный объект для обработки своих событий создает новый кодовый поток, в коем собственно и вызывает ту ф-цию, которую ты указал при вызове timeSetEvent()


> кулбэковской


эт что-то новенькое)..

callback - это гораздо ближе по звучанию "колбэк" (обратный вызов), нежели к "кулбэк" (нечто похожее на "свежий вызов")


> "висет" при входе в любую процедуру


ой не ври !)

F7 ты не давил ? не давил) ... не сподобился)
а если бы давил, то убедился бы в тгом, что ВХОД в ЛЮБУЮ процедуру осуществляется совершенно нормально.


Leonid Troyanovsky   (2005-10-07 15:52:00) [3]


> Ботвин Дмитрий   (07.10.05 15:34) [6]

> Может есть какой-то ньюанс у кулбэковской процедуры?


У оной функции, если мне не изменяет склероз, был даже список
рекомендованных для использования функций, за пределы которого
выбираться можно лишь с низкими поклонами.

--
Regards, LVT.


Ботвин Дмитрий   (2005-10-07 15:34:00) [4]

Интересный факт обноружился:

В процедуре TimeCallBack прога "виснет" при входе в любую процедуру

procedure TimeCallBack(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD); stdcall;
begin
  timeKillEvent(mmResult);
  //После этого и "висет" при входе в любую процедуру
  ...
end;

Может есть какой-то ньюанс у кулбэковской процедуры?


Digitman   (2005-10-07 15:13:00) [5]


> Просто "виснет" и всё


"просто" - это только у кроликов, в момент всем известного процесса)

"Вис" же обычно возникает при вызове по F8 той или иной п/программы ..

Мысль нажать F7 вместо F8 не приходила ?


Ботвин Дмитрий   (2005-10-07 15:09:00) [6]

> Ботвин Дмитрий   (07.10.05 14:32) [2]

Приходила. Даже пробывал на досуге. Исключений при этом не возникает. Просто "виснет" и всё...


Digitman   (2005-10-07 15:05:00) [7]


> Ботвин Дмитрий   (07.10.05 14:32) [2]


"гениальная" мысль воспользоваться встр.отладчиком в голову не приходила ?


Ботвин Дмитрий   (2005-10-07 14:32:00) [8]

Digitman ©   (07.10.05 14:00) [1]

Я думаю, что дело не вней, т.к. с обычным таймером всё работает.
Пробывал звменить таймер на обычныу задержку Sleep, после чего вызывать
Form2.BeginPlay - тоже всё нормально. Может я что-то не правильно делаю
в TimeCallBack?


Digitman   (2005-10-07 14:00:00) [9]

и что же у тебя творится в теле BeginPlay() ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо