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

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

помогите с разобраться с потоками [D7]


Страницы:   1 2 3

Zahar ©   (2005-01-09 15:31:00) 

Помогите плиз разобраться с потоками. Нашел кучу информации где разные потоки выполняют разные функции, а мне нужно чтобы все потоки выполняли одну и ту же операцию.

Задача дла примера:

Есть текстовый файл в котором N-строк с числами (для примера возьмем 300).
Каждый поток должен прочитать из этого файла по M-записей (например 50), проделать над ними определенные преобразования и записать в другой текстовый файл.

Таким образом, как я понимаю, динамически должно быть создано 6 потоков (300/50=6) каждый из которых возьмет свою часть записей из исходного файла:

Thread 1 -   1..50
Thread 2 -  51..100
Thread 3 - 101..150
Thread 4 - 151..200
Thread 5 - 201..250
Thread 6 - 251..300

Для примера каждое число нужно умножить на 2 и записать в конечный файл.

Т.е. функция для потока будет одна, но обрабатывать в каждом потоке она будет разные последовательности данных.

Помогие очень разобраться с этой задачей. В потоках я полный новичек.

Заранее благодарен за любую помощь.


Zahar   (2005-01-09 16:33:00) [41]

При компиляции:

[Warning] Unit2.pas(29): Comparing signed and unsigned types - widened both operands

При нажатии на кнопочки ничего не происходит :(


olookin   (2005-01-09 16:21:00) [42]

Ну вот по моему это работает:

Это главный юнит:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, Unit2, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   Label5: TLabel;
   Label6: TLabel;
   Button2: TButton;
   Button3: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 t: array [0..5] of TMyThread;
 th: array [0..5] of integer;
 run: boolean;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
 run:=false;
 for i:=0 to 5 do begin
 t[i]:=TMyThread.Create(true);
 t[i].Priority:=tpNormal;
 th[i]:=t[i].ThreadID;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
 randomize; run:=true;
 for i:=0 to 5 do t[i].Resume;
end;

end.

А это юнит с потоками:

unit Unit2;

interface

uses
 Classes, sysutils, stdctrls;

type
 TMyThread = class(TThread)
 private
   { Private declarations }
 protected
   procedure Execute; override;
   procedure UpdateLabel;
 end;

implementation

uses Unit1;

{ TMyThread }
var lind: integer;

procedure TMyThread.Execute;
var i,j,k: integer;
begin
 while run do
 for i:=0 to 5 do
 if ThreadID=th[i] then begin
   for j:=0 to Form1.ComponentCount-1 do
   if Form1.Components[j].Name='Label'+inttostr(i+1) then begin
   lind:=j;
   Synchronize(UpdateLabel);
   end;
 end;
end;

procedure TMyThread.UpdateLabel;
begin
 (Form1.Components[lind] as TLabel).Caption:=IntToStr(random(1000));
end;

end.


sniknik   (2005-01-09 16:17:00) [43]

> Очень хотелось бы увидеть кусочек кода который создает эти потоки. Может напишите?
давно написано
x:\Program Files\Borland\Delphi7\Demos\Threads


olookin   (2005-01-09 16:07:00) [44]

Честно сказать, я в потоках тоже новичок. Попробую...


Zahar   (2005-01-09 15:54:00) [45]

2 olookin

Очень хотелось бы увидеть кусочек кода который создает эти потоки. Может напишите?


olookin   (2005-01-09 15:50:00) [46]

Почему бы создании потоков не запоминать их ThreadID, а при выполнении функции указывать каждому потоку в зависимости от его ThreadID, какой участок файла ему прочитывать?


Zahar   (2005-01-09 15:33:00) [47]

Желательно использовать встроенный класс TThread.


Страницы:   1 2 3

Наверх

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