![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Снова я и снова торможу [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