![]() |
|
|
|
|
#1
|
|||
|
|||
|
Здравствуйте, только начал работать с потоками, пытаюсь разобраться, вот написал код:
Код:
procedure MyThread.Execute;
begin
//HTTP.Get('http://www.ya.ru');
Form1.Memo1.lines.add(str);
end;
procedure MyThread.htmlnavi;
begin
//HTTP.Get('http://www.ya.ru');
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
for i:=0 to 6 do begin
with MyThread.Create(true)do
begin
str:='Aaa'+inttostr(i);
Resume;
end;
end;Получается, что здесь я создаю 6 потоков MyThread, а MyThread.Execute -это самый главный поток через который можно рулить созданными потоками ? В memo1 получается результат: Aaa6 (6 раз), а как мне сделать чтобы Aaa c 0 по 6 было? |
|
#2
|
||||
|
||||
|
MyThread - это переменная. В ней хранится вся инфа о потоке + переменные, которые ты объявил. MyThread.Execute - это процедура, выполняемая твоими потоками. Когда ты пишешь 6 раз в одну переменную, то теряешь хендл первых 5ти потоков, всю инфу и т.д. Так что лучше юзать массив потоков
Код:
var MyThreadArray:array[1..6]of TMyThread; |
|
#3
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
MyThread = class(TThread)
private
str: String;
procedure Updt;
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ MyThread }
procedure MyThread.Execute;
begin
Synchronize(Updt);
end;
procedure MyThread.Updt;
begin
Form1.Memo1.Lines.Add(str);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i:=0 to 6 do
with MyThread.Create(True) do
begin
str:='Aaa'+IntToStr(i);
Resume;
Sleep(1);
end;
end;
end. |
|
#4
|
|||
|
|||
|
Спасибо! Моя ошибка заключалась в том, что str:string; глобальная была, перенес и заработало!
![]() |
|
#5
|
|||
|
|||
|
А бывают ли потоки в потоках? Т.е. 10 потоков, а в каждом из них еще по 10 потоков крутится?
|
|
#6
|
||||
|
||||
|
В процессе есть основной поток, и дополнительные. Даже если создать доп. поток в другом доп. потоке, то все равно он будет доп. потоком процесса.
Представь себе, что бы это было: и так процессорное время делится между процессами, в процессах - между потоками, а если еще и в потоках есть потоки, то на них бы уже вообще ничего не оставалось |