Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.28;
Скачать: CL | DM;

Вниз

Сообщения. Уведомления об изменениях других окон   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
2-1283831226
03111978
2010-09-07 07:47
2010.11.28
все значения со знаком минус....


2-1283965980
AlexDn
2010-09-08 21:13
2010.11.28
Заливка прямоугольника


2-1283525403
Zhen73
2010-09-03 18:50
2010.11.28
Как запустить приложение из программы и не зависить от него


15-1282027455
trw
2010-08-17 10:44
2010.11.28
как узнать автора файла


2-1283846165
DROWSY
2010-09-07 11:56
2010.11.28
Как можно редактировать набор из связанных таблиц?