23:56
Сельди в бочке
Отправляю сообщение из одной программы в другую (SendMessage, Win32). Первое отправляется, второе отправляется, третье... ещё несколько отправляются. А потом перестают. И программа, отправляющая сообщения, зависает. Как раз на SendMessage.
Почему же?
ОКАЗЫВАЕТСЯ, я для своего удобства и пущего контроля в принимающей программе указал на каждое приходящее сообщение выводить диалоговое окно (MessageBox). И не закрывал его (т.к. вторая программа была на фоне и я не видел, что она выводит). А пока оно не закрыто, очередь сообщений оригинального окна не обрабатывается. Её размер ограничен. Фейл.
Но всё же -- как предотвратить зависание посылающей программы, если принимающая не обрабатывает сообщения?
Почему же?
ОКАЗЫВАЕТСЯ, я для своего удобства и пущего контроля в принимающей программе указал на каждое приходящее сообщение выводить диалоговое окно (MessageBox). И не закрывал его (т.к. вторая программа была на фоне и я не видел, что она выводит). А пока оно не закрыто, очередь сообщений оригинального окна не обрабатывается. Её размер ограничен. Фейл.
Но всё же -- как предотвратить зависание посылающей программы, если принимающая не обрабатывает сообщения?
19.05.2015 в 00:02
А не в банке?
19.05.2015 в 00:24
А в банке -- это лайт-версия.
20.05.2015 в 23:09
To send a message and return immediately, use the SendMessageCallback or SendNotifyMessage function.
/ tz-lom
21.05.2015 в 00:00
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, наверное.