Форум: "Прочее";
Текущий архив: 2010.11.28;
Скачать: [xml.tar.bz2];
ВнизСообщения. Уведомления об изменениях других окон Найти похожие ветки
← →
12 © (2010-08-23 09:28) [0]начало тут, но сейчас вообще, в принципе, рассуждаю
http://delphimaster.net/view/2-1281683349/
(почему то закрыто стало)
Вообщем, идея оттуда, но заново все.
Вчера сделал так же почти, но 2мя способами, которые работают, но есть проблемы.
1. через SendMessage. (по справке - ждет реакции окна)
Происходит изменение, создается объект-изменения(ОИ), SendMessage посылает всем окнам сообщение что изменено, а в Wparam пишем указатель на объект изменения
Далее, каждое окно вытаскивает ОИ по указателю, делает свои действия.
Уничтожаем ОИ.
Проблема - пока все не обработают, не вернется управление. В принципе, и не надо. Но это пока. В дальнейшем, не приятно было бы, потому взялся за
2.PostMessage(по справке - НЕ ждет реакции окна)
Делаю тоже самое, создание ОИ, рассылка и уничтожение ОИ.
результат - AV, что логично.
Уничтожаю ОИ, а некоторые окна только получили указатель на него, хотят его достать, а он не валиден.
Тогда, сделал что каждое окно, при получении msg, помещает ОИ в свой список, и включается(при получении msg) таймер, который из списка берет сообщения, обрабатывает и уничтожает. Если список пуст - таймер отключается.
Тут проблема - все равно не понятно, когда уничтожить то ОИ, которое было самым первым? Надо же не раньше, чем гарантировано все сделали копию. Как об этом узнать?
← →
Inovet © (2010-08-23 10:40) [1]Может при отправке из главного дочерним увеличивать счётчик от нуля, а дочерние пусть шлют сообщение подтверждающее обработку, при получении такого в главном окне уменьшать счётчик, если ноль удалять ОИ.
← →
12 © (2010-08-23 10:53) [2]
> Inovet © (23.08.10 10:40) [1]
думал.
Но
если мы рассылаем сообщение, а в это время окно уничтожается - то оно никогда не ответит на сообщение и счетчик-поле ОИ никогда не станет = 0.
Таких мало, конечно, будет, но возможны
Думал о мусорщике, который бы ОИ, котрые старше time уничтожал
Но это тоже нет гарантии. Вдруг кто-то был все равно занят все это время, да и не красиво это
← →
Inovet © (2010-08-23 11:00) [3]> [2] 12 © (23.08.10 10:53)
> если мы рассылаем сообщение, а в это время окно уничтожается
Так уничтожается ведь тоже посылом сообщения на закрытие, а оно в очереди будет после уведомления. Или как ещё? А таймер тут неправильно.
← →
12 © (2010-08-23 11:12) [4]
> Или как ещё?
Идея такая - SendMessage и уничтожение ОИ
И самое первое будет гарантировано уничтожено
А
>Проблема - пока все не обработают, не вернется управление.
обходится по варианту 2.
каждое окно, при получении msg, помещает копию ОИ в свой список
и из списка эти копии сообщений обрабатывает и уничтожает.
т.е. по SendMessage не обрабатывать(что может затянуться), а только копировать. А обрабатывать потом, как время будет.
Просто кажется, что это опять же реализовано
т.е. все украдено до нас..
← →
12 © (2010-08-23 11:28) [5]
> уничтожается ведь тоже посылом сообщения на закрытие, а
> оно в очереди будет после уведомления
вона что..
это то да, но посыл на закрытие не я шлю и оно не попадает в список уведомлений изменения, который(список) формирую опять же сам.
← →
Игорь Шевченко © (2010-08-23 11:29) [6]
> начало тут
почему ты не уважаешь отвечающих ?
← →
12 © (2010-08-23 11:31) [7]
> почему ты не уважаешь отвечающих ?
напротив, очень уважаю
а почему Вы решили обратное?
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.11.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c