Главная страница
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.01 c
2-1283258748
Igor_M
2010-08-31 16:45
2010.11.28
TCPClient и TCPServer


15-1282194037
php
2010-08-19 09:00
2010.11.28
php, странности с именем файла


2-1283687760
rrr888
2010-09-05 15:56
2010.11.28
TWebBrowser. Как извлечь массив из кода страницы


3-1248293189
GanibalLector
2009-07-23 00:06
2010.11.28
cannot attach to password database


15-1282225986
ufowOw
2010-08-19 17:53
2010.11.28
Нужна помощь с реализацией игры!!