Поток связи с использованием SendMessage - PullRequest
5 голосов
/ 16 января 2009

мой вопрос: как я могу использовать SendMessage () для реализации потоковой связи между двумя потоками, один с окном (GUI), а другой без окна?

Проблема в том, что SendMessage () нужен дескриптор (HWND)?

Еще одна деталь о моем проекте: два потока, один из которых выполняет управляемый код (один с пользовательским интерфейсом), а другой - собственный код (один без окна)

Большое спасибо!

Ответы [ 4 ]

4 голосов
/ 17 января 2009

Я бы предложил создать скрытое окно. При использовании postthreadmessage существует вероятность того, что ваше сообщение может быть потеряно (т. Е. Если в почтовом ящике выполняется цикл сообщений)

Подробнее об этом можно узнать по адресу:

http://blogs.msdn.com/oldnewthing/archive/2005/04/26/412116.aspx

3 голосов
/ 16 января 2009

Возможно, вам следует попробовать PostMessage или PostThreadMessage

2 голосов
/ 17 января 2009

что сказал @jdigital. Обратите внимание, что если вы создаете скрытое окно, а ваш поток еще не реализует цикл сообщений (либо в обычном win32-говорящем, либо в контексте COM STA - и если вы не знаете, о чем я говорю тогда, вероятно, один не существует в вашей теме), вы также захотите создать цикл сообщений. ATL делает это довольно просто с _AtlModule.RunMessageLoop(); К сожалению, это также означает, что рассматриваемый поток, вероятно, будет нуждаться в управлении событиями, пока он находится в цикле сообщений. Вы можете делать сложные вещи, такие как MsgWaitForMultipleObjects, но это становится проблематичным.

Вот пример скрытых окон , если вы знакомы с ATL / COM. Я прошел через эту боль некоторое время назад и подумал, что на microsoft.public.vc.atl было полезное обсуждение, но лучшее, что я могу найти сейчас, это этот пост . в которой подробно рассматриваются варианты циклов сообщений (что делать по-другому, если у вас есть ускорители нажатий клавиш или немодальные окна, похоже, что в вашем приложении этого нет).

2 голосов
/ 16 января 2009

Если в потоке нет окна, очереди сообщений и диспетчера сообщений, то будет трудно получить к нему сообщение. Обычно потоки создают скрытые окна только для связи (взгляните на Windows Spy, и вы увидите множество примеров).

Одной из альтернатив является использование совместно используемой памяти и примитива синхронизации, такого как событие или семафор. Другой альтернативой является использование труб.

...