Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Организация взаимодействия между двумя программами


Автор: zhgutov 3.4.2007, 15:08
Есть программа №1. Можно запустить несколько ее экземпляров. Нужно сделать так, чтобы программа №2 вызывала определенную функцию во всех запущенных копиях программы №1. Как это сделать средствами WinAPI / MFC?

Автор: Sartorius 3.4.2007, 15:13
 Можешь сделать пару LPC клиент/ LPC сервер. Хоть не документировано, но вроде все еще используется. COM объект можешь зарегистрировать еще...

Автор: zhgutov 3.4.2007, 15:16
Sartorius
LPC клиент/ LPC сервер — это что? Можешь дать название какой-либо связанной функции, чтобы можно было найти doc в MSDN?

Добавлено через 4 минуты и 23 секунды
А можно обойтись без COM-объектов?

Автор: Sartorius 3.4.2007, 15:24
 http://en.wikipedia.org/wiki/Local_Procedure_Call

Автор: zhgutov 3.4.2007, 15:31
Sartorius
Спасибо!

Автор: Earnest 3.4.2007, 18:22
А просто сообщение специально созданное послать, не проще? Если возврат не интересует, конечно.

Добавлено через 3 минуты и 56 секунд
Код

#define WM_MYMSG  (WM_USER+1000) 
PostMessage (HWND_BROADCAST, WM_MYMSG, 0, 0);
// или можно зарегистрировать сообщение, чтобы уж сосем гарантированно ни с кем не пересечься)

А в программе №1 просто включить обработку этого сообщения.

Автор: zhgutov 5.4.2007, 12:46
Earnest
А просто сообщение специально созданное послать, не проще?
Нужно, чтобы задержка между посылом и приемом была минимальной и одинаковой для всех программ. Желательно в пределах 10—20 мс.

Автор: Partizan 5.4.2007, 15:21
Earnest, хммм...а если ещё N левых прог обработают это сообщение? =)


имхо можно просто создать нэймд пайп...прога 2 пишет в этот пайп команду...экземпляры проги 1 из этого пайпа её считывают

Автор: Earnest 5.4.2007, 15:54
Зарегистрируй свое сообщение (RegisterWindowMessage), и никто левый его не обработает.

Добавлено через 4 минуты и 29 секунд
Цитата(zhgutov @  5.4.2007,  13:46 Найти цитируемый пост)
Нужно, чтобы задержка между посылом и приемом была минимальной и одинаковой для всех программ. Желательно в пределах 10—20 мс. 

Посылка сообщения - это всего лишь помещение его в очереди всех работающих потоков (процессов).
Потом они его будут его извлекать и обрабатывать по мере получения управления - так же как и с любым другим способом запуска. И одновременно уж точно процедура вызвана не будет.

Автор: Nastya 9.4.2007, 16:56
Цитата

Earnest, хммм...а если ещё N левых прог обработают это сообщение? =)

Зачем левых, ты можешь послать конкретному окну.. в чем проблема ? smile
Все зависит от втоей конкретики, надо ли тебе передавать параметры в эти функции ? Можно например юзать объекты ядра (типа event) и выставлять их когда что-то должно отработать ...
Это как например, давай конкретнее задачу

Автор: Partizan 10.4.2007, 10:45
Nastya, вопрос был не от создателя темы) Earnest gthdsv параметром написала HWND_BROADCAST вследствие чего он и был задан... у меня почему-то было представление что несколько прог могут одно и то же пользовательское сообщение обработать...(со стандартными виндовыми сообщениями помоему дела обстоят именно так)

по поводу вопроса...Earnest на вроде него ответила и я всё понял ;)

з.ы. вопрос в догонку тогда можно ли сделать чтобы несколько моих приложений воспринимали сообщение...допустим такое
Код

#define WM_MYMSG  (WM_USER+1000)

Автор: Earnest 10.4.2007, 20:33
А что мешает? Другое дело, что теоретически другие программы могут объявить себе сообщение с тем же номером (но подразумевать совершенно другое), и тут может возникнуть конфуз...
Эта проблема решается с помощью зарегистрированных текстовых сообщений - маловероятно, чтобы разные приложения придумали одинаковые строки, особенно если их делать подлиннее и предварять своими префиксами (напр. имя программы или, если быть параноиком, гуид сгенерить).
Т.е., конечно, рассылать бродкастом нужно либо стандартные сообщения, либо заведомо уникальные (т.е. зарегистрированные).

Автор: Doc_d0s 14.4.2007, 15:21
Используй MailBox если к скорости не категорично относишься

Автор: Estuark 19.2.2023, 20:13
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)