Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1283258748
Igor_M
2010-08-31 16:45
2010.11.28
TCPClient и TCPServer


15-1282556497
vajo
2010-08-23 13:41
2010.11.28
Блок питания.


2-1283425358
bostar
2010-09-02 15:02
2010.11.28
про пиктограммы


2-1283683267
Hapastiks
2010-09-05 14:41
2010.11.28
заголовок сообщения


2-1283843667
Илья К.
2010-09-07 11:14
2010.11.28
AV при использовании IBUpdateSQLW





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский