unit PrimeThread;
interface
uses
Classes, Windows;
type
TPrimeThrd2 = class(TThread)
private
{ Private declarations }
FStartNum: integer;
function IsPrime(TestNo: integer): boolean;
protected
procedure Execute; override;
public
property StartNum: integer read FStartNum write FStartNum;
end;
implementation
uses PrimeForm2, SysUtils;
function TPrimeThrd2.IsPrime(TestNo: integer): boolean;
var
iter: integer;
begin
result := true;
if TestNo < 0 then
result := false;
if TestNo <= 2 then
exit;
iter := 2;
while (iter < TestNo) and (not terminated) do
begin
if (TestNo mod iter) = 0 then
begin
result := false;
exit;
end;
Inc(iter);
end;
end;
procedure TPrimeThrd2.Execute;
var
CurrentNum: integer;
begin
CurrentNum := FStartNum;
while not Terminated do
begin
if IsPrime(CurrentNum) then
begin
EnterCriticalSection(PrimeFrm.StringSection);
PrimeFrm.StringBuf.Add(IntToStr(CurrentNum) + ' is prime.');
LeaveCriticalSection(PrimeFrm.StringSection);
PostMessage(PrimeFrm.Handle, WM_DATA_IN_BUF, 0, 0);
end;
Inc(CurrentNum);
end;
end;
end.