Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];




Вниз

Снова я и снова торможу 


Eraser   (2002-01-03 15:40) [0]

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



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

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

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

Удачи.

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



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

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



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

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

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



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

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



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

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



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

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



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

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



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

а если бе TTHread



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

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



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

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



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

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



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

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

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



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

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



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

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



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

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



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

ау



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

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



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

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



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

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

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




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.018 c
1-75557           bit                   2002-01-06 10:38  2002.01.24  
Error


7-75694           aleXXoft              2001-10-11 12:54  2002.01.24  
PC-speaker & SoundBlaster


3-75477           Mike_                 2001-12-19 16:55  2002.01.24  
Ячейки в DBGrid


1-75548           Анатолий              2002-01-03 05:42  2002.01.24  
Отчёт в Delphi


1-75545           Антипов Николай       2002-01-05 17:37  2002.01.24  
Доступ к файлу