![]() |
|
#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; jmp $ ; Happy End! The Cake Is A Lie. |
#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
|
||||
|
||||
![]() В процессе есть основной поток, и дополнительные. Даже если создать доп. поток в другом доп. потоке, то все равно он будет доп. потоком процесса.
Представь себе, что бы это было: и так процессорное время делится между процессами, в процессах - между потоками, а если еще и в потоках есть потоки, то на них бы уже вообще ничего не оставалось jmp $ ; Happy End! The Cake Is A Lie. |