|
|
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Не изобретаю велосипед - просто есть старый код и его надо перелопатить поменьше исправляя. Типа так: Код: plaintext 1. 2. 3. 4. 5. В принципе работает , но при посылке сообщения подписавшийся может на Destroy попытаться отписаться. В результате с чёрного хода ( ОтписатьМеня ) меняется цикл по которому отправляются ещё сообщения ПослатьСообщениеПодписавшимся . =============================== Плагины без окон (только классы/COM/dll/всё что угодно InProc). ============================== Какие варианты: - Завести в плагины HANDLE? - Loсk списка? - Потоковая очередь? - API? - ....... ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 13:25 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
В результате никто ничего не понял ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2005, 16:15 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
У меня основной модуль с плагинами общается через стандартный набор плагиновых функций. А плагины с ним, через SendMessage на специально обученное окно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 07:54 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
SiebentearbeitУ меня основной модуль с плагинами общается через стандартный набор плагиновых функций. А плагины с ним, через SendMessage на специально обученное окно :) допускаю этот вариант, но всё равно - надо как-то хранить список этих HANDLE-обученных окон в плагине. Подключился плагин - у него спец.окно - он должен этот HANDLE окна опубликовать как-то. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 10:32 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Специально обученное окно одно в главном модуле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 14:35 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
SiebentearbeitСпециально обученное окно одно в главном модуле. Блин! Я про Фому ты про Ерёму :). Это понятно. Если много плагинов записались у него (дали свой HANDLE ил адрес?), то ТАМ список? Если список, то при цикле по списку как избежать модификации списка? Или второй вопрос: - Например, плагин № 2 хочет узнать когда закроется окно в главном модуле (событие № 5). - Он шлёт в главный просьбу записать его на событие № 5? - Или плагины могут расчитывать только на постоянный перечень процедур-событий? ====================== У меня счас любой плагин может записаться у главного модуля или отправить в него событие (все записанные будут оповещены). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 17:59 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Избежать модификации списка - флагом. Начал прогонять список - выставил флаг блокировки модификации списка. Функция добавления/удаления ничё не сделает, пока список не обработается. Ещё эту штуку классно делать семафорами и средами. --- У меня пока постоянный перечень процедур. В принципе, он таким и останется. Запустить, проверить на соответствие, инициировать, обменяться нужными параметрами, закрыть. Потому как с плагинами общается _приложение_, а плагины общаются с _окном_этого_приложения_. Потом окон будет очень много. Они все будут принадлежать некоторым _классам_. От _класса_ будет зависеть, какие _сообщения_ этот _класс_ окон поддерживает. Через _некоторый_механизм_ плагинам можно будет подписаться на нужные им сообщения. Через некоторый _стандартный_интерфейс_ для плагинов будет передаваться информация о сообщении и окне этого сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 14:58 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
SieИзбежать модификации списка - флагом. Начал прогонять список - выставил флаг блокировки модификации списка. Функция добавления/удаления ничё не сделает, пока список не обработается. Ещё эту штуку классно делать семафорами и средами. Одно но! При флаге плагин не сделает что хотел (туалет занят :)). Он будет должен либо в потоке долбится потом. Либо так и не узнает что его просьба не удовлетворена. Ещё сложнее если класс должен уничтожиться после получения события . Т.е. надо либо MessageMy.ОповестиМеняОдинРаз(Я, НомерСобытия). Либо в потоке долбится "пока не откроют". :) Я пока сделал так. Пред циклом делаю копию списка указателей на фукции плагинов (callbak). Даже если кто изменит основной список, я по копии списка успею пройтись. ЗЫ. Где то читал что в API можно свою очередь сообщений сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 16:48 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Хмм , гдето я слышал , по поводу ОЛЕ окон :) ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 16:54 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Если уж аналогия с туалетами, то Я предлагаю делать так: Есть бесконечное число туалетов(список) И предбанник (механизм добавления в список) Так вот, делаем так: 1. Закрываем дверь в предбанник. 2. Загоняем всех, кто в предбаннике, в туалеты и ждём, пока они всё сделают. 3. Те, кто пришёл во время хождения, стоят и ждут под дверью в предбанник. 4. Как тока все вышли из туалетов, открываем дверь в предбанник, чтобы все могли ходить туда-сюда, до следующего цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 08:28 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Прикольно ты описал )))))). Меня смущает п.3 - как в основном потоке можно ждать? НИКАК! Я сделал так: В предбаннике тоже туалет , но в общюю утку (Основной список). Пока я в туалете всех обслуживаю ). Кто-то захочет (пока я в цикле-туалете) ещё раз зайти. Он сходит только в утку. Когда я освобожусь из туалета, то я одноразовый туалет выбрасываю (копия утки) и жду след.события. http://www.sql.ru/forum/actualthread.aspx?tid=162787 ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 12:07 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
В основном потоке и не надо ждать. Те, кто собрался в туалет, складываются в буфер до предбанника. Как тока дверь открылась. Главный поток выгребает буфер и пополняет список. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 15:51 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Petro123 Меня смущает п.3 - как в основном потоке можно ждать? НИКАК! ИМХО, типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 16:11 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Sie вот теперь мы пришли к одному мнению. Плох что вроде нельзя проверить недействительность указателя на память. Я сохраняю указатель и если кто-то не отписался и уничтожился. То я не могу проверить жив ли он без исключалки. В Win вроде этого нет если отправить сообщение на недействительный handle окна. S.PR большие сомнения - Основной поток зацикливать нельзя (его ждут остальные 50 dll пока ты тут в туалете перед дверью). Даже в поликлинниках - приходишь записываешся на талончик и уходишь!!!!!!!! ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 16:30 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Недействительный хэндл окна - BOOL IsWindow(hWnd); Та же, почти, ситуация с туалетом. Тока 2 двери. Предбанник отделяем двумя дверями. Одна - в туалеты. Вторая - в мир. Как тока основной поток захотел поработать - открываем дверь в туалет. Все зашли в кабинки - закрываем. Делим одного желающего посетить туалет на двух людей. (2 запроса - на подписку и на отписку) 1. который хочет в туалет. 2. он же, но передумал. Если, пока все сидели по кабинкам, кто-то пришёл в предбанник с надеждой сходить в туалет - сидит и ждёт. Если кто передумал - тоже заходит, сидит и ждёт. Тока все вышли из кабинок, сразу проверяем вновь пришедших. --- Те, кто сидит в туалете в данный момент - IsWindow(hWnd); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 16:46 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Проблема - есть ли такая Код: plaintext ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:19 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Я вообще преобразовываю указатель на строку и потом обратно (но он может быть уже недействительный). :). ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:21 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Какой ты проблемный товарищ... :) Ну запрети всем умирать, пока кто-то сидит в кабинке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 10:17 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
SieКакой ты проблемный товарищ... :) Ну запрети всем умирать, пока кто-то сидит в кабинке. )))))))))) Выше говорилось, что запретить/остановить основной поток проблематично. Нить процессора одна и она тянет поочереди 1000 объектов. Если объект не умер сейчас оно не умрет никогда ))). Что то из Джеймса Бонда :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 13:55 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Есть хорошая штука в сообщениях Win - PostMessage. Управление не дожидаясь обработки передаётся обратно (вот здесь можно туалет держать закрытым). Очередь из PostMessage будет освобождена когда окно освободится. Но для этого надо окно и очередь Win. А у меня почти такая похуже )))). Ладно топик закрыт. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 14:00 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
Petro123Есть хорошая штука в сообщениях Win - PostMessage. Управление не дожидаясь обработки передаётся обратно (вот здесь можно туалет держать закрытым). Очередь из PostMessage будет освобождена когда окно освободится. Но для этого надо окно и очередь Win. А у меня почти такая похуже )))). Ладно топик закрыт. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! В сторону хуков не копал? SetWindowsHookEx? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 15:08 |
|
||
|
Как свою очередь сообщений между плагинами?
|
|||
|---|---|---|---|
|
#18+
SetWindowsHookEx не то. Это помогает поставить разведчика в очередь win . Причём глобальную - будешь ловит все события всех процессов. Мне нужна своя очередь. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 15:46 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32935678&tid=2033656]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 379ms |

| 0 / 0 |
