Files
HeidiSQL/source/UPipeThread.pas

64 lines
1.4 KiB
ObjectPascal

unit UPipeThread;
interface
uses
Windows, Classes;
type
TPipeThread = class(TThread)
private
FReadPipeData: TThreadMethod;
FProcessHandle: THandle;
FWillSuspend : Boolean;
protected
procedure Execute; override;
public
procedure Resume; reintroduce;
property ProcessHandle : THandle
read FProcessHandle write FProcessHandle;
property ReadPipeData: TThreadMethod
read FReadPipeData write FReadPipeData;
property WillSuspend : Boolean
read FWillSuspend write FWillSuspend;
end;
implementation
{ Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten dürfen
nur in einer Methode namens Synchronize aufgerufen werden, z.B.
Synchronize(UpdateCaption);
und UpdateCaption könnte folgendermaßen aussehen:
procedure TPipeThread.UpdateCaption;
begin
Form1.Caption := 'Aktualisiert in einem Thread';
end; }
{ TPipeThread }
procedure TPipeThread.Execute;
begin
FWillSuspend := false;
while (WaitForSingleObject(ProcessHandle,1) <> WAIT_OBJECT_0)
and not Terminated do
begin
if Assigned(FReadPipeData) then
Synchronize(FReadPipeData);
if FWillSuspend then
Suspend
else
Sleep(1);
end;
end;
procedure TPipeThread.Resume;
begin
FWillSuspend := false;
inherited;
end;
end.