ソースを参照

* changed some visibilities to have access in inherited classes

master
Bergmann89 9年前
コミット
0702129654
3個のファイルの変更14行の追加7行の削除
  1. +3
    -2
      uutlGenerics.pas
  2. +10
    -4
      uutlMessageThread.pas
  3. +1
    -1
      uutlMessages.pas

+ 3
- 2
uutlGenerics.pas ファイルの表示

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



+ 10
- 4
uutlMessageThread.pas ファイルの表示

@@ -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);


+ 1
- 1
uutlMessages.pas ファイルの表示

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


読み込み中…
キャンセル
保存