|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.01.2008, 17:45 | #1 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 20
|
Несколько потоков
Подскажите, плз, как сделать!
Есть модуль потока команд. В теле программы (в основном потоке) я хочу запустить 3 потока (с разными параметрами на входе), чтоб они работали параллельно. Как это реализовать? |
18.01.2008, 18:09 | #2 |
Форумчанин Подтвердите свой е-майл
Регистрация: 20.11.2007
Сообщений: 500
|
Статья из справочника! Прочитай!!
|
18.01.2008, 18:10 | #3 |
Форумчанин Подтвердите свой е-майл
Регистрация: 20.11.2007
Сообщений: 500
|
А вообще тебе наверное надо 3 потока...
|
18.01.2008, 18:13 | #4 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 20
|
Больше. Их количество определяется исходными данными программы (числом строк Memы)
|
18.01.2008, 18:29 | #5 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 20
|
За пример спасибо, но его я и сам читал в книжке Фаронова...
Видимо, я не совсем точно объяснил, чего я хочу. Суть в том, что поток я создал. С конструктором и процедурами. Те из них, которые меняют визуальные компоненты главной формы вызываются в MyTheard.Execute через Synchronize. Примерно так: unit Unit4; interface uses Classes; type TTh = class(TThread) private procedure Work; procedure Start; procedure Stop; { Private declarations } public constructor Create(Var1: String; Var2: integer); protected procedure Execute; override; end; implementation Uses Unit1,Classes; constructor TTh.Create(Que: String; Number: integer); begin inherited Create(True); FreeOnTerminate:= True; Question:= Que; Num:= Number; Priority:= tpNormal; end; procedure TTh.Execute; begin { Place thread code here } Synchronize(Start); While (Not Terminated) Do Synchronize(Work); Synchronize(Stop); end; procedure TTh.Work; begin некие действия, использующие компоненты главной формы end; procedure TTh.Start; begin сообщение в форму о старте потока end; procedure TTh.Stop; begin сообщение в форму о финише потока end; end. Вопрос в том, как заставить работать ну, скажем, 5 таких потоков одновременно. Так не получается: For i:= 0 To Num-1 Do Begin Th[i]:= TTh.Create(Question,i); Th[i].Resume; End; А как надо? Последний раз редактировалось Adm; 18.01.2008 в 18:32. |
18.01.2008, 18:34 | #6 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
А где объявление массива потоков Th[i] ?
|
18.01.2008, 18:58 | #7 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 20
|
Оно сделано в основной программе: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw, ExtCtrls, Unit2, Unit4, ActnList, StdActns, SHDocVw_EWB, EwbCore, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, ComCtrls, Grids; type TForm1 = class(TForm) ... private Th: array[0..9] of TTh; { Private declarations } public Num : Byte; { Public declarations } end; var Form1: TForm1; implementation ... |
18.01.2008, 19:33 | #8 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
"Содержимое секции PRIVATE невидимо за пределами юниты, в которой оно объявлено." Кто вас научил спрятать, вместо того, чтобы расшарить? |
|
18.01.2008, 19:39 | #9 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 20
|
А мне и не нужно, чтобы элементы массива Th[i] были видны за пределами Unit1!
|
18.01.2008, 19:46 | #10 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Глобальны переменные для потоков | PM85 | Общие вопросы C/C++ | 3 | 15.04.2008 18:12 |
Использование потоков | Repz | Общие вопросы Delphi | 6 | 25.01.2008 14:20 |
Перенаправление потоков | Carbon | Win Api | 5 | 25.11.2007 14:46 |
Дескрипторы потоков - Для каждого элемента списка необходимо создать поток, выполняющий требуемые функции | kdv0403 | Общие вопросы Delphi | 2 | 09.06.2007 11:12 |