Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];

Вниз

Thread   Найти похожие ветки 

 
Птущенко Денис   (2003-05-09 08:38) [0]

Допустим я выполняю какой-то цикл, но пока он не выполнится все другие процессы программы останавливаюся.
Вопрос: Как создать поток и чтоб этот цикл выполнялся в нем параллельно с другими процессами и не мешал им ?
Заранее спасибо.


 
german goering   (2003-05-09 10:45) [1]

Че-то вроде ответ в заголовке поста, или вопрос в том, как это реализовать?


 
Птущенко Денис   (2003-05-09 10:59) [2]

Да, как это реализовать ?


 
german goering   (2003-05-09 11:00) [3]

Ага
unit Unit1;

interface

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

type

TMyThread = class(TThread)
private
FCount: Integer;
FResult: Integer;
protected
procedure Execute; override;
public
constructor Create(Count: Integer);
property Result: Integer read FResult;
property Count: Integer read FCount;
end;

TForm1 = class(TForm)
Button1: TButton;
procedure OnTerminateThread(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1; {$R *.dfm}

implementation

{ TMyThread }

constructor TMyThread.Create;
begin
inherited Create(False);
FCount := Count;
FreeOnTerminate := True;
end;

procedure TMyThread.Execute;
var I: Integer;
begin
for I := 0 to FCount do FResult := FResult + Random(FCount);
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var I: Integer;
begin
Button1.Caption := "";
Button1.Enabled := False;
TMyThread.Create(2000).OnTerminate := OnTerminateThread;
for I := 0 to 10000 do
begin
Application.ProcessMessages;
Caption := IntToStr(I);
end;
Button1.Enabled := True;
ShowMessage("Main cicle finished");
end;

procedure TForm1.OnTerminateThread(Sender: TObject);
begin
Button1.Caption := IntToStr(TMyThread(Sender).Result);
ShowMessage("MyThread is terminated");
end;

end.

?


 
german goering   (2003-05-09 11:05) [4]

В конструкторе
constructor TMyThread.Create;
begin
inherited Create(False);
FCount := Count;
FreeOnTerminate := True;
end;

inherited Create(False); - означает, начнет ли поток выполняться сразу после его создания, в противном сл-е, (True), необходимо вызвать метод Resume для выполнения метода Execute.

FreeOnTerminate := True; - обеспечивает уничтожение экземпляра TMyThread после завершения его работы.


 
Verg   (2003-05-10 12:01) [5]

Вставь в цикл sleep(0)


 
Diamond Cat   (2003-05-11 15:28) [6]


> Verg © (10.05.03 12:01)
> Вставь в цикл sleep(0)
БРАВО....



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
3-31080
Тимофеев Илья
2003-06-16 11:30
2003.07.10
Список серверов и баз данных


14-31501
Леприкон
2003-06-23 07:58
2003.07.10
Как стать супер-пупер программистом?


1-31310
Holy
2003-06-26 18:10
2003.07.10
Delphi vs DivX


1-31237
region
2003-06-29 15:34
2003.07.10
List index out of bounds ...


4-31581
Top Gun
2003-05-10 14:30
2003.07.10
Как удалить окно в системе ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский