lolwut98
25.07.2011, 17:25
Всем привет. Не нашёл тут темы, в которой рассказывается о использовании потоков. Создам свою.
Для чего нужны потоки? Для того, чтобы выполнять в них какую-либо задачу, и чтобы при этом форма не зависала. Вот как их создавать:
пишем вот этот код после type:
type
MyThr = class(TThread)
protected
procedure Execute; override;
end;
потом нажимаем ctrl+shift+c и видим, что появилось вот это:
procedure MyThr.Execute;
begin
inherited;
end;
это и есть тело потока. здесь пишем наш код. например:
procedure MyThr.Execute;
var
i:integer;
begin
for i:=0 to 2000 do
Application.MainForm.Memo1.Lines.Add(inttostr(i));
end;
для того, чтобы этот код работал, надо кинуть на форму TMemo.
Если вы напишете Memo1.Lines.Add(inttostr(i)), то это не будет работать, т.к. Memo1 принадлежит форме, а не потоку. Для того, чтобы код работал, надо обратиться к Memo1 через форму, как это показано в коде повыше.
потом кидаем на форму 1 TButton. В обработчике OnClick пишем:
MyThr.Create(false);
Должно получиться что-то вроде этого:
procedure TForm1.Button1Click(Sender: TObject);
begin
MyThr.Create(false);
end;
Всё. Готово. Можете запускать проект. Когда вы нажмёте на кнопку, то в Memo1 будут добавляться цифры от 0 до 2000. И форма не будет зависать. Если вам надо остановить поток, то напишите
MyThr.Suspend;
Чтобы опять его запустить, надо написать
MyThr.Resume;
А чтобы убить поток, то пишите
MyThr.Terminate;
Можете это использовать как хотите. Например, сделать в потоке авторизацию и т.п.
Удачи :)
Для чего нужны потоки? Для того, чтобы выполнять в них какую-либо задачу, и чтобы при этом форма не зависала. Вот как их создавать:
пишем вот этот код после type:
type
MyThr = class(TThread)
protected
procedure Execute; override;
end;
потом нажимаем ctrl+shift+c и видим, что появилось вот это:
procedure MyThr.Execute;
begin
inherited;
end;
это и есть тело потока. здесь пишем наш код. например:
procedure MyThr.Execute;
var
i:integer;
begin
for i:=0 to 2000 do
Application.MainForm.Memo1.Lines.Add(inttostr(i));
end;
для того, чтобы этот код работал, надо кинуть на форму TMemo.
Если вы напишете Memo1.Lines.Add(inttostr(i)), то это не будет работать, т.к. Memo1 принадлежит форме, а не потоку. Для того, чтобы код работал, надо обратиться к Memo1 через форму, как это показано в коде повыше.
потом кидаем на форму 1 TButton. В обработчике OnClick пишем:
MyThr.Create(false);
Должно получиться что-то вроде этого:
procedure TForm1.Button1Click(Sender: TObject);
begin
MyThr.Create(false);
end;
Всё. Готово. Можете запускать проект. Когда вы нажмёте на кнопку, то в Memo1 будут добавляться цифры от 0 до 2000. И форма не будет зависать. Если вам надо остановить поток, то напишите
MyThr.Suspend;
Чтобы опять его запустить, надо написать
MyThr.Resume;
А чтобы убить поток, то пишите
MyThr.Terminate;
Можете это использовать как хотите. Например, сделать в потоке авторизацию и т.п.
Удачи :)