Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2008, 17:45   #1
Adm
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 20
По умолчанию Несколько потоков

Подскажите, плз, как сделать!
Есть модуль потока команд. В теле программы (в основном потоке) я хочу запустить 3 потока (с разными параметрами на входе), чтоб они работали параллельно. Как это реализовать?
Adm вне форума Ответить с цитированием
Старый 18.01.2008, 18:09   #2
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

Статья из справочника! Прочитай!!
Вложения
Тип файла: zip 1.zip (4.8 Кб, 23 просмотров)
Никки вне форума Ответить с цитированием
Старый 18.01.2008, 18:10   #3
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

А вообще тебе наверное надо 3 потока...
Никки вне форума Ответить с цитированием
Старый 18.01.2008, 18:13   #4
Adm
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Никки Посмотреть сообщение
А вообще тебе наверное надо 3 потока...
Больше. Их количество определяется исходными данными программы (числом строк Memы)
Adm вне форума Ответить с цитированием
Старый 18.01.2008, 18:29   #5
Adm
Пользователь
 
Регистрация: 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.
Adm вне форума Ответить с цитированием
Старый 18.01.2008, 18:34   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А где объявление массива потоков Th[i] ?
mihali4 вне форума Ответить с цитированием
Старый 18.01.2008, 18:58   #7
Adm
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 20
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А где объявление массива потоков Th[i] ?

Оно сделано в основной программе:

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
...
Adm вне форума Ответить с цитированием
Старый 18.01.2008, 19:33   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
A private member is invisible outside of the unit or program where its class is declared.
Перевожу:
"Содержимое секции PRIVATE невидимо за пределами юниты, в которой оно объявлено."

Кто вас научил спрятать, вместо того, чтобы расшарить?
mihali4 вне форума Ответить с цитированием
Старый 18.01.2008, 19:39   #9
Adm
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 20
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
"Содержимое секции PRIVATE невидимо за пределами юниты, в которой оно объявлено."
А мне и не нужно, чтобы элементы массива Th[i] были видны за пределами Unit1!
Adm вне форума Ответить с цитированием
Старый 18.01.2008, 19:46   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Adm Посмотреть сообщение
А мне и не нужно, чтобы элементы массива Th[i] были видны за пределами Unit1!
Оригинально...
А как же вы хотите их использовать в Unit4, если сами спрятали их от нее ?
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальны переменные для потоков 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