Hallo Zusammen!
Ich wollte eine TThreadlist erweiter, da ich das herausholen eines Items etwas unhandlich finden.
Schön wäre gewesen:
Delphi-Quellcode:
var
Que : TThreadList<IFoo>;
Foo : IFoo;
begin
Foo := Que.Locklist.First; // Schade
try
Foo.Whatever;
finally
Que.Unlocklist;
end;
end;
Leider liefert das eine
Exception, wenn die Liste leer ist, da ITEM[0] zugegriffen wird.
Also eine kleine Ableitung
Delphi-Quellcode:
type
TMyThreadQue<T> = class(TThreadList<T>)
Public
Function PopElement(Var LCommand:T):boolean;
end;
function TMyThreadQue<T>.PopElement(var LCommand: T): boolean;
var
CList : TList<T>;
begin
CList := LockList;
try
if CList.Count > 0
then begin
Result := true;
LCommand := CList.First;
CList.Remove(LCommand);
end
else begin
Result := false;
LCommand := NIL; // Wie geht das hier?
end;
finally
UnlockList;
end;
end;
Frage: Wie kann ein "T" initialisieren?
Oder habe ich da einen Denkfehler?
Grüsse Mavarik