![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
У меня программа стала выдавать ошибки, причём отладчик вообще ничего не говорит, где вылет. Только говорит, что я где-то вызвал процедуру, указывающую на нулевой адрес. После двух часов отладки, где же это я обратился к нулевому адресу, я наконец-то нашёл строчку, которая выдавала ошибки:
if (@IdleProc <> nil) and not PeekMessage(Message, 0, 0, 0, pm_NoRemove) then IdleProc По моему замыслу, она должна работать так: если процедура ожидания есть и нету сообщений в очереди, то выполнить процедуру ожидания. Однако после долгой отладки выяснилось, что PeekMessage зачем-то ещё и пытается обработать сообщение! Ну и внутри обработчика деактивации IdleProc ставился на nil, чтобы свёрнутая программа проц не ела, а потом этот IdleProc пытался вызваться. Так вот, что делать, чтобы просто проверить наличие сообщений? Я не хочу, чтобы она их ещё и обрабатывала. Я САМ РЕШУ, когда мне надо обработать сообщение, а когда нет! -------------------- |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Она ставится в ноль в ответ на сообщение деактивации внутри оконной процедуры. Так ты что, используя PeekMessage ждешь WM_ACTIVATE? Напрасно... Это так называемое non-queued сообщение, оно поступает сразу в оконную процедуру, а не в очередь. Я ж говорю - мало информации. Сделай тестовый проект, иллюстрирующий проблему, тогда можно будет думать, как обойти эту проблему. А пока - это все переливания из пустого в порожнее. |
![]() ![]() |
![]() |
Текстовая версия | 12.07.2025 3:33 |