Browse Source

* changed some visibilities to have access in inherited classes

master
Bergmann89 11 years ago
parent
commit
0702129654
3 changed files with 14 additions and 7 deletions
  1. +3
    -2
      uutlGenerics.pas
  2. +10
    -4
      uutlMessageThread.pas
  3. +1
    -1
      uutlMessages.pas

+ 3
- 2
uutlGenerics.pas View File

@@ -331,20 +331,21 @@ type
{ Lock-Free Queue for single Producer / Consumer calls; { Lock-Free Queue for single Producer / Consumer calls;
Producer and Consumer are synchronized with SpinLocks } Producer and Consumer are synchronized with SpinLocks }
generic TutlQueue<T> = class(TObject) generic TutlQueue<T> = class(TObject)
private type
public type
PListItem = ^TListItem; PListItem = ^TListItem;
TListItem = packed record TListItem = packed record
data: T; data: T;
next: PListItem; next: PListItem;
end; end;
private private
function GetCount: Integer;
protected
fFirst: PListItem; fFirst: PListItem;
fLast: PListItem; fLast: PListItem;
fFirstLock: Cardinal; fFirstLock: Cardinal;
fLastLock: Cardinal; fLastLock: Cardinal;
fCount: Integer; fCount: Integer;
fOwnsObjects: Boolean; fOwnsObjects: Boolean;
function GetCount: Integer;
public public
property Count: Integer read GetCount; property Count: Integer read GetCount;




+ 10
- 4
uutlMessageThread.pas View File

@@ -15,7 +15,7 @@ uses
type type
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TutlMessageThread = class(TThread, IUnknown) TutlMessageThread = class(TThread, IUnknown)
private type
public type
TMessageQueue = class(specialize TutlQueue<TutlMessage>) TMessageQueue = class(specialize TutlQueue<TutlMessage>)
private private
fEvent: TSimpleEvent; fEvent: TSimpleEvent;
@@ -27,15 +27,15 @@ type
constructor Create(const aOwnsObjects: Boolean = true); constructor Create(const aOwnsObjects: Boolean = true);
destructor Destroy; override; destructor Destroy; override;
end; end;
private
fMessages: TMessageQueue;
protected protected
fMessages: TMessageQueue;
fRefCount : longint; fRefCount : longint;
{ implement methods of IUnknown } { 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 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 _AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual;
function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual; function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; virtual;
protected protected
function CreateMessageQueue: TMessageQueue; virtual;
function WaitForMessages(const aWaitTime: Cardinal): Boolean; function WaitForMessages(const aWaitTime: Cardinal): Boolean;
function ProcessMessages: Boolean; virtual; function ProcessMessages: Boolean; virtual;
procedure ProcessMessage(const {%H-}aMessage: TutlMessage); virtual; procedure ProcessMessage(const {%H-}aMessage: TutlMessage); virtual;
@@ -249,6 +249,12 @@ begin
result := InterLockedDecrement(fRefCount); result := InterLockedDecrement(fRefCount);
end; end;


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlMessageThread.CreateMessageQueue: TMessageQueue;
begin
result := TMessageQueue.Create(true);
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlMessageThread.WaitForMessages(const aWaitTime: Cardinal): Boolean; function TutlMessageThread.WaitForMessages(const aWaitTime: Cardinal): Boolean;
begin begin
@@ -343,7 +349,7 @@ end;
constructor TutlMessageThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt); constructor TutlMessageThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt);
begin begin
inherited Create(CreateSuspended, StackSize); inherited Create(CreateSuspended, StackSize);
fMessages := TMessageQueue.Create;
fMessages := CreateMessageQueue;
Threads.Lock; Threads.Lock;
try try
Threads.Add(ThreadID, self); Threads.Add(ThreadID, self);


+ 1
- 1
uutlMessages.pas View File

@@ -24,7 +24,7 @@ const
type type
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TutlMessage = class(TObject) TutlMessage = class(TObject)
private
protected
fID: Cardinal; fID: Cardinal;
fWParam: PtrInt; fWParam: PtrInt;
fLParam: PtrInt; fLParam: PtrInt;


Loading…
Cancel
Save