Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Общение" с COM-сервером посредством Message 
:(
    Опции темы
Vikong
Дата 2.10.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.9.2009

Репутация: нет
Всего: нет



Привет всем!

Возникла такая задачка:
Есть COM-сервер и программуля, его использующая. Она запускает некий процесс в сервере, об окончании которого сервер сигнализирует отправкой сообщения через 
Код

BroadcastSystemMessage(BSF_IGNORECURRENTTASK+BSF_SENDNOTIFYMESSAGE+BSF_NOTIMEOUTIFNOTHUNG, ...)

Все работает, но порой возникает проблема, когда вызывается метод СОМ-сервера во время он-паинт и он-дроу, что приводит к возникновению ошибки 80010005 "Внешний вызов изнутри фильтра сообщений невозможен"
Согласно MSDN, это решается не прямым вызовом методов сервера, а отправкой сообщений.
Попробовал ту же BroadcastSystemMessage, но сервер не получает сообщения.

Подскажите, посредством каких функций лучше наладить общение между программулей и СОМ-сервером?
nb
Я программист БД, поэтому мои решения, возможно, покажутся идиотскими smile
PM MAIL   Вверх
xvr
Дата 5.10.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Непонятно, как связаны COM сервер и 'он-паинт и он-дроу'? Где происходят эти самые 'он-паинт и он-дроу' и кто кого вызывает? 
И нафига нужен BroadcastSystemMessage если в COM это штатно реализуется Event'ами и Callback'ами?

PM MAIL   Вверх
Vikong
Дата 19.10.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.9.2009

Репутация: нет
Всего: нет



Вот уж так получается, что нет возможности получить доступ к callback'ам. В FoxPro, где это все реализовано, такого понятия, как "указатель на функцию" просто не существует. Можно было бы втиснуть код на ассемблере  smile , но уж больно не хоцца.
Переформулирую вопрос:
Какая функция WinAPI обеспечивает отсылку сообщения с _гарантией_, что получатель это сообщение получит, в каком бы состоянии на данный момент ни находился (например, в "спячке"), и чтобы отправитель при этом не ждал, когда получатель обработает сообщение.
PM MAIL   Вверх
xvr
Дата 19.10.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Vikong @ 19.10.2009,  12:27)
Переформулирую вопрос:
Какая функция WinAPI обеспечивает отсылку сообщения с _гарантией_, что получатель это сообщение получит, в каком бы состоянии на данный момент ни находился (например, в "спячке"), 

В другой процесс - IMHO никакая  smile 
Цитата

и чтобы отправитель при этом не ждал, когда получатель обработает сообщение.
А это вообще противоречит п1  smile 

PM MAIL   Вверх
Vikong
Дата 19.10.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.9.2009

Репутация: нет
Всего: нет



Цитата(xvr @  19.10.2009,  12:41 Найти цитируемый пост)
В другой процесс - IMHO никакая

Получается, что если получатель сообщения в другом потоке занят, то сообщение, отправленное ему, потеряется, если не будет обработано в течение некоторого промежутка времени, даже если получатель "жив", так?


PM MAIL   Вверх
xvr
Дата 19.10.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Vikong @ 19.10.2009,  15:16)
Цитата(xvr @  19.10.2009,  12:41 Найти цитируемый пост)
В другой процесс - IMHO никакая

Получается, что если получатель сообщения в другом потоке занят, то сообщение, отправленное ему, потеряется, если не будет обработано в течение некоторого промежутка времени, даже если получатель "жив", так?

Вряд ли совсем 'потеряется', но когда именно оно будет обработано неизвестно. А если получатель помрет (или закроет окно/нить куда посланно сообщение), то оно вообще может не обработаться  smile 

Если нужно просто отсигнализировать о чем то, попробуйте примитивы синхронизации (Event и прочие)
См. CreateEvent в MSDN

PM MAIL   Вверх
Vikong
Дата 20.10.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.9.2009

Репутация: нет
Всего: нет



Цитата(xvr @  19.10.2009,  16:08 Найти цитируемый пост)
Вряд ли совсем 'потеряется', но когда именно оно будет обработано неизвестно. А если получатель помрет

Это для меня как раз не критично. Главное, чтобы сообщение было обработано рано или поздно. А если получатель "умер", то уже никакие сообщения не нужны.


Цитата(xvr @  19.10.2009,  16:08 Найти цитируемый пост)
Если нужно просто отсигнализировать о чем то, попробуйте примитивы синхронизации (Event и прочие)
См. CreateEvent в MSDN

Спасибо за ссылку, посмотрю.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.