Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сообщения. Не знаю как подступиться. [D5, Win95/98]


Страницы:   1 2

NewDelpher ©   (2004-10-15 09:17:00) 

Есть приложение в котором штук 50 объектов, наследованных от одного класса. Есть объект, который должен через определенные промежутки времени послылать всем этим объектам сообщение. А они, получив его, производят какие-нибудь действия.
Вот я и не знаю с чего начать? И как организовать такой обмен? Какие есть в Delphi инструменты?


KSergey   (2004-10-15 15:20:00) [1]

> NewDelpher

Сам не знаешь что хочешь...
Возьми три объекта и помоделируй на пальцах все что тут понаписал. И пр "синхронность" и про "старое состояние" и т.п.
Вот тут и наступит понимание, что такого просто не бывает чего хочется.
А хочется бреда: вроде понимание пришло, что только последовательно (да, толькопоследовательно!), но "сосяние второго зависит от сосяния первого". А состояние первого, надо думать, зависит от сосяния второго... И оба должны быть либо в сосянии А, либо в сосянии Б. Теперь вспоминаем, что работают принципиально последовательно (даже потоки!) - и как ты себе это представляешь?
Максимум что можно придумать - до полнойсмены состония выдавать наружу старые, непротиворечивые данне. Как поменялось - новые, опять же непротиворечивые...

Короче, надоело писать.
Начни с 3-х на пальца - дальше сам поймешь, думаю.


NewDelpher   (2004-10-15 12:43:00) [2]

А если использовать TClientSocket и TServerSocket, это не будет выглядеть глупо?


NewDelpher   (2004-10-15 12:35:00) [3]


> Можно использовать WaitForMultiObject

А в D5 это есть? Что-то не нашел.


Sandman25   (2004-10-15 12:34:00) [4]

Как я понял, есть 20 переменных a1, a2, a3, a4..., a20.
Нужно посчитать новые значение переменных по формулам:
a1=f1(a1, a2, ...)
a2=f2(a1, a2, ...)
...
Так вот, без сохранения старых значений переменных это невозможно.


Zelius   (2004-10-15 12:26:00) [5]

НА каждый объект по потоку, в каждом потоке ждать по WaitForSingleObject WaitForMultipleObject этот евент с ручным сбросом, а потом в главном потоке установить этот евент и тогда все потоки начнут дружно синхронно работать.


Erik1   (2004-10-15 12:14:00) [6]

Можно использовать WaitForMultiObject а event устанавливать один на всех. Зачем тебе Dispatch все равно сообщения тебе ненужны. Тебе надо создать один Thtead где в цикле обработать один шаг у все твоих объектов, после опять цикл по всем объектам и второй шаг расчетов. И так до конца самого длиного цикла.


NewDelpher   (2004-10-15 12:06:00) [7]


> Zelius ©   (15.10.04 11:41) [23]
> Потоки + Event'ы, тогда можно говорить о какой-то синхронности.


Сделаю я TNotifyEvent в объектах. Но ведь, чтобы событие генерить, надо все равно конкретный объект указывать? Или я не прав?


Zelius   (2004-10-15 11:41:00) [8]

Потоки + Event'ы, тогда можно говорить о какой-то синхронности.


NewDelpher   (2004-10-15 11:33:00) [9]


> Так у тебя проблемы в алгоритме, а сообщения тут совершенно
> непричем. Вобшето можно  Dispatch(Message) использовать,
> но это просто для общего развития. А тебе надо серезно подумать
> над алгоритмом, возможно, что тебе объекты вобще ненужны.
> Приведи задачу полностью.

Dispatch(Message)? А можно пример?

Задача такая. Есть куча однотипных объектов с различными сценариями поведения. Надо смоделировать их действия в общей среде.


Erik1   (2004-10-15 11:13:00) [10]

Так у тебя проблемы в алгоритме, а сообщения тут совершенно непричем. Вобшето можно  Dispatch(Message) использовать, но это просто для общего развития. А тебе надо серезно подумать над алгоритмом, возможно, что тебе объекты вобще ненужны. Приведи задачу полностью.


NewDelpher   (2004-10-15 11:05:00) [11]


> Всё равно будет последовательно.

Последовательно будет, но... При пробеге в цикле первый объект изменил свое состояние и начал действовать (при этом он может анализировать состояние других объектов и в соответсвии с ним выполнять то или другое действие), тогда если последний находится в "старом" состоянии, то поведение первого объекта будет неверным.

> Тогда уж заводи по отдельному thread для действий каждого
> объекта

Завел бы, да нужно чтобы была общая для всех постоянная времени t. И процессы бы в каждом объекте выполнялись с задержкой t*n, где n - различна для каждого.


MegaVolt   (2004-10-15 10:46:00) [12]

Всё равно будет последовательно.
Какой разбег между N и N+1 объектом ты допускаешь?
Или между первым и последним?


ЮЮ   (2004-10-15 10:43:00) [13]

>А мне надо, что бы первый объект ничего не делал, пока последний не получил сообщение.

А смысл. Но после того, как последний получит сообщение, выплгяясь а одном потоке, свои действия они тоже смогут выполнять только последовательно. Тогда уж заводи по отдельному thread для действий каждого объекта - получишь такую псведосинхроннось, боже упаси :)


NewDelpher   (2004-10-15 10:36:00) [14]

Ну оговорился, не синхронно, а псведосинхронно


NewDelpher   (2004-10-15 10:29:00) [15]


> KSergey ©   (15.10.04 10:16) [12]
> > [7] NewDelpher ©   (15.10.04 09:49)
> > Надо, чтобы синхоронно всё было.
>
> Ну когда этот наивняк закончится, блин? Ну был же уже этот
> вопрос не так давно, точно такой же.
> Надеюсь, это не вы были??
>
> К стати, что такое "синхронность" по-вашему? Одновременно?
>
> Вот вы человек здравомыслящий, верно? У вас на компьютере
> один процессор, правильно? Один процессор в каждый комкретный
> момент времени выполняет одну команду, верно?
>
> ТАК О КАКОЙ НАФИГ СИНХРОННОСТИ (ОДНОВРЕМЕННОСТИ) ВЫ ВЕДЕТЕ
> РЕЧЬ??!!!


Это понятно, что один процессор. Получается при отсылке сообщения группе объектов происходит беганье по всему списку и присваивание? Но в ведь в этом случае действия в объектах будут выполнены последовательно? А мне надо, что бы первый объект ничего не делал, пока последний не получил сообщение.


R   (2004-10-15 10:29:00) [16]

В продолжение [14]
Например вот это- тот же цикл(одновременности нет)
procedure TForm1.Button1Click(Sender: TObject);
var
I:Byte;
begin
for I:=0 To Self.ComponentCount-1 Do
If Self.Components[I] is TCustomEdit1
Then SendMessage(TCustomEdit1(Self.Components[I]).Handle,MM_Beep,0,0);
end;


R   (2004-10-15 10:24:00) [17]

>KSergey ©   (15.10.04 10:12) [11]
Да вопрос я понял. Просто привел пример варианта(и Ваш правилен)
именно как было в вопросе через сообщения. А одновременности не будет и в моем примере. На компе одновременно по моему вообще ничего не происходит и не выполняется.


Erik1   (2004-10-15 10:22:00) [18]

Да сообщения тут нужны, как рыбе зоник. Вот если бы все наоборот асинхроно должно было работать, то PostMessage в самый раз. Виртуальные методы однозначно.


KSergey   (2004-10-15 10:16:00) [19]

> [7] NewDelpher ©   (15.10.04 09:49)
> Надо, чтобы синхоронно всё было.

Ну когда этот наивняк закончится, блин? Ну был же уже этот вопрос не так давно, точно такой же.
Надеюсь, это не вы были??

К стати, что такое "синхронность" по-вашему? Одновременно?

Вот вы человек здравомыслящий, верно? У вас на компьютере один процессор, правильно? Один процессор в каждый комкретный момент времени выполняет одну команду, верно?

ТАК О КАКОЙ НАФИГ СИНХРОННОСТИ(ОДНОВРЕМЕННОСТИ) ВЫ ВЕДЕТЕ РЕЧЬ??!!!


KSergey   (2004-10-15 10:12:00) [20]

> [8] R ©   (15.10.04 09:57)

перечитайте вопрос внимательно
Его интересует как послать, а не обработать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо