zHz00 Untitled

понедельник, 18 мая 2015
23:56 Сельди в бочке
Отправляю сообщение из одной программы в другую (SendMessage, Win32). Первое отправляется, второе отправляется, третье... ещё несколько отправляются. А потом перестают. И программа, отправляющая сообщения, зависает. Как раз на SendMessage.

Почему же?

ОКАЗЫВАЕТСЯ, я для своего удобства и пущего контроля в принимающей программе указал на каждое приходящее сообщение выводить диалоговое окно (MessageBox). И не закрывал его (т.к. вторая программа была на фоне и я не видел, что она выводит). А пока оно не закрыто, очередь сообщений оригинального окна не обрабатывается. Её размер ограничен. Фейл.

Но всё же -- как предотвратить зависание посылающей программы, если принимающая не обрабатывает сообщения?

@темы: Программирование

URL
Интересно, что правильней: открыто признать, что ты челов...
Удалил "зацените" нахрен. И тут начинают сканда...
Трижды повторно дублировал пятый класс... [изображение]
Заставить жить человека. Поймать его на краю бескрайнего ...
Вот кем хорошо в Корее быть, так ето пенсионерами. Только...
Иногда есть люди, пообщавшись с которыми 5 минут, преиспо...

19.05.2015 в 00:02

19.05.2015 в 00:02
Сельди в бочке

А не в банке?
URL

19.05.2015 в 00:24

19.05.2015 в 00:24
polyidioms.narod.ru/index/0-93

А в банке -- это лайт-версия.
URL

20.05.2015 в 23:09

20.05.2015 в 23:09
Процитирую документацию:
To send a message and return immediately, use the SendMessageCallback or SendNotifyMessage function.

/ tz-lom
URL

21.05.2015 в 00:00

21.05.2015 в 00:00
tz-lom -- спасибо. Прочитать документацию-то я и не догадался (серьёзно), потому что по примерам в проекте и так было понятно, как это применяется. Вот я дурак.
URL

22.05.2015 в 15:52

22.05.2015 в 15:52
А пока оно не закрыто, очередь сообщений оригинального окна не обрабатывается. Её размер ограничен.
Если бы дело было в этом, у тебя бы ни одно SendMessage не вернулось. Даже первое. Т.к. The SendMessage function ... does not return until the window procedure has processed the message. Висело бы в мессадж-боксе.

Возможно, не каждый из твоих SendMessage-запросов выводил MessageBox. Первый, который вывел - тот и застопорился.

как предотвратить зависание посылающей программы, если принимающая не обрабатывает сообщения?
Смотря, что тебе нужно. Если "отправить и забыть", то PostMessage. Если "отправить и узнать результат, но чтобы если та сторона не обрабатывает сообщения, то не зависнуть, а выйти с ошибкой" - define "не обрабатывает сообщения" (может, обрабатывает, но через полчаса). Если "отправить и продолжить работу, но получить уведомление о прочтении", то как сказал tz-lom, наверное.
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail