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

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

Снова я и снова торможу [D5, Win95/98, Win2k]


Eraser ©   (2002-01-03 15:40:00) 

Вопрос упрощу до примитива: Как сделать чтобы работало 6 одинаковых процессов одновременно с использованием таймера в каждом процессе(с фреймами не работает- фрейм создается только один в один момент времени и таймер у него тоже один)


ctapik-net   (2002-01-08 20:24:00) [1]

procedure Thread1.Execute;
begin
Frame1.Timer1Timer(Sender);
end;
procedure Thread2.Execute;
begin
Frame2.Timer1Timer(Sender);
end;

Кто ж так делает! Это нарушает принципы ООП! Правельнее будет послать сообшение через SendMessage. Кстати а у ты Create с каким параметром вызываешь True или False? Чтобы поток небедленно запустить на выполнеение надо вызвать по-моему с False.


Eraser   (2002-01-08 17:23:00) [2]

если тебе не трудно то буду признателен :dimit@mailru.com заранее спасибо


panov   (2002-01-08 16:55:00) [3]

Давай я тебе вышлю пример программы с потоками и комментариями, сам попытаешься разобраться...


Eraser   (2002-01-08 16:45:00) [4]

ау


Eraser   (2002-01-07 22:24:00) [5]

В этом примере все понятно: создаются потоки каждый для обработки своей процедуры. Но у меня ведь все процедуры одинаковое т.к. фрейм 1 (или я чего то не до конца понимаю с фреймами). Ведь все равно потоки я должен организовать в основной форме а не в фрейме чтобы свсе работало? Если я пишу такой примитивный код:
procedure Thread1.Execute;
begin
Frame1.Timer1Timer(Sender);
end;
procedure Thread2.Execute;
begin
Frame2.Timer1Timer(Sender);
end;
то ничего не работает!!!! Как поступить именно с 1-м фреймом и несколькими потоками которые используют этот фрейм??


panov   (2002-01-06 23:33:00) [6]

В DELPHI есть пример сортировки в потоках.
По аналогии можешь сделать.
Абсолютно безразлично, что у тебя находится на фреймах.


Mikh_Dmit   (2002-01-06 22:47:00) [7]

ну более менее все понятно. Последний вопрос как мне передать управление фрейму или мне необходимо вызывать каждую процедуру в отдельности? У меня ведь фрейм немаленький - несколько таймеров , несколько кнонок и т.д.


panov   (2002-01-06 19:11:00) [8]

>Mikh_Dmit (06.01.02 14:10) или eraser.

TThread не относится к какой либо форме или любому визуальному компоненту.
Дочерние потоки создаются в основном потоке и все потоки работают в контексте основного процесса.
Каждый процесс создается для выполнения определенной задачи.
В твоем случае создается 8 потоков, каждый из которых предназначет для обслуживания одного порта.
Внутри потока тебе нужно только лишь отображать некие данные.
Какой визуальный объект ты будешь изменять - абсолютно безразлично.
У тебя это фреймы, т.е. каждому потоку назначаешь свой фрейм для отображения(а не фрейму назначаешь поток).
Создаешь 8 потоков, каждый обновляет свой фрейм.


Mikh_Dmit   (2002-01-06 14:10:00) [9]

ну хорошо Thread так Thread. Но как мне лучше сделать : ведь насколько я понимаю я не могу создать поток в фрейме и мне придется создавать поток для каждого фрейма в основной программе. Или я в чем то не прав???


DK   (2002-01-06 05:24:00) [10]

Паралельно вообще не бывает (разве что на 2 компах).
Конвейерная архитектура всё-таки.
Но TThread в данном случае - реальная альтернатива.


ctapik-net   (2002-01-05 17:39:00) [11]

Такого не бывает чтобы без TTHread и работало паралельно!


Mikh_Dmit   (2002-01-05 16:54:00) [12]

а если бе TTHread


ctapik-net   (2002-01-05 10:54:00) [13]

Блин создаешь свой тип потока, при инициализации подаешь идентификатор порнта с которым он будет работать, запускаешь. Поток отработав посылает программе сообщение через SendMessage где описан идентификатор порта с которым он работал и выходные значения. Вот и все.


Tosov   (2002-01-04 23:58:00) [14]

Может тебе надо TThread


Eraser   (2002-01-04 23:50:00) [15]

Ну вопрос о процессах зашел не сразу. Задача была такая сделать непрерывный !!!! опрос 8 портов причем обработка сигналов из порта и посылка в порт формируются по одному алгоритму но ответ - в разные массивы. Была попытка сделать через фрейм (8 фреймов на форме) но пока идет непрерывный опрос через один фрейм другие НЕ РАБОТАЮТ. Получилось только через таймеры т.е. перерыв через промежуток и запускается второй фрейм.HELP как???


panov   (2002-01-04 11:19:00) [16]

>Eraser (03.01.02 15:40)
Из твоего вопроса непонятно, что ты хочешь получить в итоге.
Ты не упрости вопрос, а конкретизируй.


Незнайка   (2002-01-04 11:12:00) [17]

??? Что значит - "... если я два раза переписываю один и тот же код то ..."

Можно поконкретнее вопрос....тебе требуется одновременно из разных процессов работать с разными участками одного "телевизора" ? Я правильно понял ? )))
Если это так.....то все Ж Вам, батенька я опять советую ту-же библиотеку..потому-шта ), в противном случае Вы снова будете изобретать велосипед.... Поверьте старому и больному программеру который "растаскивал" процессы еще на Эльбрусе )))


Mikh_Dmit   (2002-01-03 22:34:00) [18]

ну а если как-нибудь по другому. ведь если я два раза переписываю один и тот же код то все работает одновременно


Незнайка   (2002-01-03 15:53:00) [19]

Рискну посоветовать тебе использовать библиотеку работы с потоками GALA - Сергея Томского. Очень интересная вещь и пока малоглючная - :-)

По-крайней мере, если раньше не занимался распараллеливанием много поймешь. )))

Удачи.

P.S. да - ссылочка -> www.dps.aeed.tpu.edu.ru/gurin/gala/index.htm


Наверх

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