Главная страница
    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.008 c
11-31168
IZVER
2002-11-01 13:09
2003.07.10
Как сохранить stream в файл?


1-31259
ss300
2003-06-30 00:46
2003.07.10
Вставка в TDBImage


1-31329
Um
2003-06-25 06:44
2003.07.10
inherited inherited;


14-31409
yu-roman
2003-06-22 02:40
2003.07.10
Как уменьшить вес .exe файла


1-31227
Dimaxx
2003-06-27 22:58
2003.07.10
DLL без кода





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский