|
|
@@ -15,7 +15,7 @@ uses |
|
|
|
type |
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
TutlMessageThread = class(TThread, IUnknown) |
|
|
|
private type |
|
|
|
public type |
|
|
|
TMessageQueue = class(specialize TutlQueue<TutlMessage>) |
|
|
|
private |
|
|
|
fEvent: TSimpleEvent; |
|
|
@@ -27,15 +27,15 @@ type |
|
|
|
constructor Create(const aOwnsObjects: Boolean = true); |
|
|
|
destructor Destroy; override; |
|
|
|
end; |
|
|
|
private |
|
|
|
fMessages: TMessageQueue; |
|
|
|
protected |
|
|
|
fMessages: TMessageQueue; |
|
|
|
fRefCount : longint; |
|
|
|
{ implement methods of IUnknown } |
|
|
|
function QueryInterface({$IFDEF FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} iid : tguid;out obj) : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; |
|
|
|
function _AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual; |
|
|
|
function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual; |
|
|
|
protected |
|
|
|
function CreateMessageQueue: TMessageQueue; virtual; |
|
|
|
function WaitForMessages(const aWaitTime: Cardinal): Boolean; |
|
|
|
function ProcessMessages: Boolean; virtual; |
|
|
|
procedure ProcessMessage(const {%H-}aMessage: TutlMessage); virtual; |
|
|
@@ -249,6 +249,12 @@ begin |
|
|
|
result := InterLockedDecrement(fRefCount); |
|
|
|
end; |
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlMessageThread.CreateMessageQueue: TMessageQueue; |
|
|
|
begin |
|
|
|
result := TMessageQueue.Create(true); |
|
|
|
end; |
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
function TutlMessageThread.WaitForMessages(const aWaitTime: Cardinal): Boolean; |
|
|
|
begin |
|
|
@@ -343,7 +349,7 @@ end; |
|
|
|
constructor TutlMessageThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt); |
|
|
|
begin |
|
|
|
inherited Create(CreateSuspended, StackSize); |
|
|
|
fMessages := TMessageQueue.Create; |
|
|
|
fMessages := CreateMessageQueue; |
|
|
|
Threads.Lock; |
|
|
|
try |
|
|
|
Threads.Add(ThreadID, self); |
|
|
|