![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с таймером [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() ?