2013-06-14 3 views
0

Возможно ли создать объект события, который станет сигналом, когда доступны/доступны сообщения (-ы) GUI, например, можно создать объекты событий, которые сигнализируют о наличии данных в сокете, например? Идея заключалась бы в использовании WaitMultipleEvents для чего-то, что происходит в графическом интерфейсе или запроса, поступающего в сокет TCP/IP.win32: ожидающий объект события для сообщений GUI?

Я бы делегировал весь материал для связи с клиентом и сервером в фоновый поток, если это не было приложение QuickTime (QuickTime довольно изворотливое, когда речь идет о многопоточности, по крайней мере, на win32).

BTW, можно ли делать такие вещи, как перемещение/изменение размера/переименование окон, созданных в другом потоке, с использованием выделенных функций - или это потребует сообщений для сообщений явно?

+1

Можете ли вы просто сделать это в цикле сообщений Windows? Это действительно то, что ждет сообщений GUI (среди прочих). –

+1

Если вы не хотите запускать свое мероприятие, отправив сообщение в очередь ввода GUI (разумный подход, как предлагается @RogerRowland), вы можете использовать API MsgWaitForMultipleObjects() для запуска очереди сообщений Windows. –

ответ

2

В вашей очереди нет ожидаемого объекта для сообщений, но есть функция ожидания, которая будет ждать ожидаемого объекта или сообщение в вашей очереди. См. MsgWaitForMultipleObjects.

2

Не существует такого события, чтобы сигнализировать о наличии сообщения Windows. Решение заключается в получении уведомлений сокетов в виде сообщения Windows вместо события. WSAAsyncSelect настраивает этот режим в сокете. Это позволяет использовать цикл сообщений, чтобы получать как сообщения GUI, так и уведомления сокетов, все в одном потоке.

+0

Да, я знаю - но, похоже, это общая мудрость, чтобы использовать эту функцию. Сообщения могут занять свое время, и слишком тяжелая коммуникация может привести к тому, что графический интерфейс не реагирует. Я не уверен, что подход, использующий MsgWaitForMultipleObjects, отличается в этом аспекте. – RJVB

0

Спасибо за ваши ответы. Действительно, мне напомнили в другом месте MsgWaitForMultipleObjects и использовать это (code extract:)

+0

Почему вы добавили этот ответ вообще, когда Адриан говорит то же самое и еще? И почему вы не приняли ответ Адриана? –

Смежные вопросы