powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как свою очередь сообщений между плагинами?
22 сообщений из 22, страница 1 из 1
Как свою очередь сообщений между плагинами?
    #32933404
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не изобретаю велосипед - просто есть старый код и его надо перелопатить поменьше исправляя.
Типа так:

Код: plaintext
1.
2.
3.
4.
5.
TКлассСообщений
FList : TList;  // список записавшихся  адрес процедуры/интерфейса и номер сообщения

ДобавитьМеня(Self, NumMess : Константа);
ОтписатьМеня(Self, NumMess : Константа);
ПослатьСообщениеПодписавшимся(NumMess : Константа);

В принципе работает , но при посылке сообщения подписавшийся может на Destroy попытаться отписаться. В результате с чёрного хода ( ОтписатьМеня ) меняется цикл по которому отправляются ещё сообщения ПослатьСообщениеПодписавшимся .
===============================
Плагины без окон (только классы/COM/dll/всё что угодно InProc).
==============================
Какие варианты:
- Завести в плагины HANDLE?
- Loсk списка?
- Потоковая очередь?
- API?
- .......
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32934951
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В результате никто ничего не понял
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32935678
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня основной модуль с плагинами общается через стандартный набор плагиновых функций. А плагины с ним, через SendMessage на специально обученное окно :)
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32935881
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiebentearbeitУ меня основной модуль с плагинами общается через стандартный набор плагиновых функций. А плагины с ним, через SendMessage на специально обученное окно :)
допускаю этот вариант, но всё равно - надо как-то хранить список этих HANDLE-обученных окон в плагине.
Подключился плагин - у него спец.окно - он должен этот HANDLE окна опубликовать как-то. Так?
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32936528
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Специально обученное окно одно в главном модуле.
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32937130
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiebentearbeitСпециально обученное окно одно в главном модуле.
Блин! Я про Фому ты про Ерёму :).
Это понятно.
Если много плагинов записались у него (дали свой HANDLE ил адрес?), то ТАМ список?
Если список, то при цикле по списку как избежать модификации списка?
Или второй вопрос:
- Например, плагин № 2 хочет узнать когда закроется окно в главном модуле (событие № 5).
- Он шлёт в главный просьбу записать его на событие № 5?
- Или плагины могут расчитывать только на постоянный перечень процедур-событий?
======================
У меня счас любой плагин может записаться у главного модуля или отправить в него событие (все записанные будут оповещены).
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32938892
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Избежать модификации списка - флагом.
Начал прогонять список - выставил флаг блокировки модификации списка.
Функция добавления/удаления ничё не сделает, пока список не обработается.
Ещё эту штуку классно делать семафорами и средами.

---
У меня пока постоянный перечень процедур. В принципе, он таким и останется.
Запустить, проверить на соответствие, инициировать, обменяться нужными параметрами, закрыть.
Потому как с плагинами общается _приложение_, а плагины общаются с _окном_этого_приложения_.

Потом окон будет очень много. Они все будут принадлежать некоторым _классам_. От _класса_ будет зависеть, какие _сообщения_ этот _класс_ окон поддерживает. Через _некоторый_механизм_ плагинам можно будет подписаться на нужные им сообщения. Через некоторый _стандартный_интерфейс_ для плагинов будет передаваться информация о сообщении и окне этого сообщения.
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32939317
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SieИзбежать модификации списка - флагом.
Начал прогонять список - выставил флаг блокировки модификации списка.
Функция добавления/удаления ничё не сделает, пока список не обработается.
Ещё эту штуку классно делать семафорами и средами.

Одно но! При флаге плагин не сделает что хотел (туалет занят :)). Он будет должен либо в потоке долбится потом. Либо так и не узнает что его просьба не удовлетворена.
Ещё сложнее если класс должен уничтожиться после получения события . Т.е. надо либо MessageMy.ОповестиМеняОдинРаз(Я, НомерСобытия). Либо в потоке долбится "пока не откроют". :)

Я пока сделал так.
Пред циклом делаю копию списка указателей на фукции плагинов (callbak).
Даже если кто изменит основной список, я по копии списка успею пройтись.
ЗЫ. Где то читал что в API можно свою очередь сообщений сделать.
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32939334
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм , гдето я слышал , по поводу ОЛЕ окон :)

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32940096
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Если уж аналогия с туалетами, то

Я предлагаю делать так:

Есть бесконечное число туалетов(список)
И предбанник (механизм добавления в список)

Так вот, делаем так:
1. Закрываем дверь в предбанник.
2. Загоняем всех, кто в предбаннике, в туалеты и ждём, пока они всё сделают.
3. Те, кто пришёл во время хождения, стоят и ждут под дверью в предбанник.
4. Как тока все вышли из туалетов, открываем дверь в предбанник, чтобы все могли ходить туда-сюда, до следующего цикла.
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32940702
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно ты описал )))))).
Меня смущает п.3 - как в основном потоке можно ждать? НИКАК!
Я сделал так:
В предбаннике тоже туалет , но в общюю утку (Основной список). Пока я в туалете всех обслуживаю ). Кто-то захочет (пока я в цикле-туалете) ещё раз зайти. Он сходит только в утку. Когда я освобожусь из туалета, то я одноразовый туалет выбрасываю (копия утки) и жду след.события.
http://www.sql.ru/forum/actualthread.aspx?tid=162787
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32941619
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
В основном потоке и не надо ждать. Те, кто собрался в туалет, складываются в буфер до предбанника. Как тока дверь открылась. Главный поток выгребает буфер и пополняет список.
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32941696
Фотография S.PR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
Меня смущает п.3 - как в основном потоке можно ждать? НИКАК!

ИМХО, типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
repeat 
  try
     сразу дождались
     break;
    except
      не дождались и что делать? 
  end;
until false
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32941777
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sie вот теперь мы пришли к одному мнению.
Плох что вроде нельзя проверить недействительность указателя на память.
Я сохраняю указатель и если кто-то не отписался и уничтожился. То я не могу проверить жив ли он без исключалки. В Win вроде этого нет если отправить сообщение на недействительный handle окна.
S.PR
большие сомнения - Основной поток зацикливать нельзя (его ждут остальные 50 dll пока ты тут в туалете перед дверью). Даже в поликлинниках - приходишь записываешся на талончик и уходишь!!!!!!!!
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32941830
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Недействительный хэндл окна - BOOL IsWindow(hWnd);


Та же, почти, ситуация с туалетом.
Тока 2 двери.
Предбанник отделяем двумя дверями.
Одна - в туалеты.
Вторая - в мир.

Как тока основной поток захотел поработать - открываем дверь в туалет.
Все зашли в кабинки - закрываем.
Делим одного желающего посетить туалет на двух людей. (2 запроса - на подписку и на отписку)
1. который хочет в туалет.
2. он же, но передумал.
Если, пока все сидели по кабинкам, кто-то пришёл в предбанник с надеждой сходить в туалет - сидит и ждёт. Если кто передумал - тоже заходит, сидит и ждёт. Тока все вышли из кабинок, сразу проверяем вновь пришедших.
---
Те, кто сидит в туалете в данный момент - IsWindow(hWnd);
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32941949
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема - есть ли такая
Код: plaintext
IsWindow(hWnd); 
для указателя на недействительную память/интрерфейс.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32941956
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще преобразовываю указатель на строку и потом обратно (но он может быть уже недействительный). :).
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32942913
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Какой ты проблемный товарищ... :)

Ну запрети всем умирать, пока кто-то сидит в кабинке.
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32943655
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SieКакой ты проблемный товарищ... :)

Ну запрети всем умирать, пока кто-то сидит в кабинке.
)))))))))) Выше говорилось, что запретить/остановить основной поток проблематично. Нить процессора одна и она тянет поочереди 1000 объектов. Если объект не умер сейчас оно не умрет никогда ))). Что то из Джеймса Бонда :).
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32943669
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть хорошая штука в сообщениях Win - PostMessage. Управление не дожидаясь обработки передаётся обратно (вот здесь можно туалет держать закрытым). Очередь из PostMessage будет освобождена когда окно освободится. Но для этого надо окно и очередь Win.
А у меня почти такая похуже )))).
Ладно топик закрыт.

______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32943950
Фотография S.PR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Есть хорошая штука в сообщениях Win - PostMessage. Управление не дожидаясь обработки передаётся обратно (вот здесь можно туалет держать закрытым). Очередь из PostMessage будет освобождена когда окно освободится. Но для этого надо окно и очередь Win.
А у меня почти такая похуже )))).
Ладно топик закрыт.

______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
В сторону хуков не копал? SetWindowsHookEx?
...
Рейтинг: 0 / 0
Как свою очередь сообщений между плагинами?
    #32944085
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SetWindowsHookEx не то. Это помогает поставить разведчика в очередь win . Причём глобальную - будешь ловит все события всех процессов. Мне нужна своя очередь.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как свою очередь сообщений между плагинами?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]