Implements a default OnExecute handler for TThread.Execute, while maintaining
backward compatibility.
You can now do this:
with TThread.Create(true) do begin
OnExecute:[EMAIL PROTECTED];
OnTerminate:[EMAIL PROTECTED];
FreeOnTerminate:=true;
Resume;
end;
Signed-off-by: Al Boldi <[EMAIL PROTECTED]>
--
Tested on linux w/ fpc 2.0.2 .
--- tthread.bak.inc 2005-12-05 00:22:12.000000000 +0300
+++ tthread.inc 2006-11-07 10:05:20.000000000 +0300
@@ -301,6 +301,11 @@ begin
WRITE_DEBUG('thread terminated');
end;
+procedure TThread.Execute;
+begin
+ if Assigned(FOnExecute) then FOnExecute(self);
+end;
+
procedure TThread.CallOnTerminate;
begin
// no need to check if FOnTerminate <> nil, because
--- classesh.bak.inc 2005-12-05 00:22:39.000000000 +0300
+++ classesh.inc 2006-11-07 10:04:39.000000000 +0300
@@ -1211,6 +1211,7 @@ type
FFreeOnTerminate: Boolean;
FFinished: Boolean;
FReturnValue: Integer;
+ FOnExecute: TNotifyEvent;
FOnTerminate: TNotifyEvent;
FMethod: TThreadMethod;
FSynchronizeException: TObject;
@@ -1222,7 +1223,7 @@ type
protected
FThreadID: TThreadID; // someone might need it for pthread_* calls
procedure DoTerminate; virtual;
- procedure Execute; virtual; abstract;
+ procedure Execute; virtual; //abstract;
procedure Synchronize(Method: TThreadMethod);
property ReturnValue: Integer read FReturnValue write FReturnValue;
property Terminated: Boolean read FTerminated;
@@ -1257,6 +1258,7 @@ type
property Priority: TThreadPriority read GetPriority write SetPriority;
property Suspended: Boolean read FSuspended write SetSuspended;
property ThreadID: TThreadID read FThreadID;
+ property OnExecute: TNotifyEvent read FOnExecute write FOnExecute;
property OnTerminate: TNotifyEvent read FOnTerminate write FOnTerminate;
property FatalException: TObject read FFatalException;
end;
_________________________________________________________________
To unsubscribe: mail [EMAIL PROTECTED] with
"unsubscribe" as the Subject
archives at http://www.lazarus.freepascal.org/mailarchives