Re: Delphi threading



To make things simpler, here's the form source:

unit PrimeForm;

interface

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

type
TPrimeFrm = class(TForm)
NumEdit: TEdit;
SpawnButton: TButton;
procedure SpawnButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
PrimeFrm: TPrimeFrm;

implementation

uses PrimeThread;

{$R *.DFM}

procedure TPrimeFrm.SpawnButtonClick(Sender: TObject);

var
NewThread: TPrimeThrd;

begin
NewThread := TPrimeThrd.Create(True);
NewThread.FreeOnTerminate := True;
try
NewThread.TestNumber := StrToInt(NumEdit.Text);
NewThread.Resume;
except on EConvertError do
begin
NewThread.Free;
ShowMessage('That is not a valid number!');
end;
end;
end;

end.

//.................And here's the thread unit source..................:

unit PrimeThread;

interface

uses
Classes;

type
TPrimeThrd = class(TThread)
private
FTestNumber: integer;
protected
function IsPrime: boolean;
procedure Execute; override;
public
property TestNumber: integer write FTestNumber;
end;

implementation

uses SysUtils, Dialogs;

function TPrimeThrd.IsPrime: boolean;

var
iter: integer;

begin
result := true;
if FTestNumber < 0 then
begin
result := false;
exit;
end;
if FTestNumber <= 2 then
exit;
for iter := 2 to FTestNumber - 1 do
begin
if (FTestNumber mod iter) = 0 then
begin
result := false;
{exit;}
end;
end;
end;

procedure TPrimeThrd.Execute;
begin
if IsPrime then
ShowMessage(IntToStr(FTestNumber) + 'is prime.')
else
ShowMessage(IntToStr(FTestNumber) + 'is not prime.');
end;

end.

.


Quantcast