TIdPeerThread
является потомком TThread
. Свойство Handle
содержит дескриптор уровня OS-уровня от CreateThread()
. Невозможно отличить значение Handle
непосредственно от указателя объекта TIdPeerThread
. Вы должны либо:
1) Храните указатель TIdPeerThread
сам объект в LongWord
вместо значения TIdPeerThread.Handle
, а затем бросить его обратно, когда это необходимо:
var
LW: LongWord;
Peer: TIdPeerThread;
Peer := ...;
LW := LongWord(Peer);
...
Peer := TIdPeerThread(LW);
2) Сохраните значение TIdPeerThead.Handle
в LongWord
, затем цикл через TIdTCPServer.Threads
список ищет TIdPeerThread
объекта, который имеет соответствующее значение, когда это необходимо:
var
LW: LongWord;
Peer: TIdPeerThread;
List: TList;
I: Integer;
Peer := ...;
LW := LongWord(Peer.Handle);
...
Peer := nil;
List := IdTCPServer1.Threads.LockList;
try
for I := 0 to List.Count-1 do
begin
if LongWord(TIdPeerThread(List[I]).Handle) = LW then
begin
Peer := TIdPeerThread(List[I]);
Break;
end;
end;
finally
IdTCPServer1.Threads.UnlockList;
end;
Спасибо за ответ. Не могли бы вы показать мне небольшой пример того, как я могу хранить TIdPeerThread в Longword и отбрасывать его назад? Заранее спасибо. –
Я обновил свой ответ, но мне действительно нужно показать вам, как приписывать указатель на целое число и обратно? Это программирование Delphi 101 (возможно, возможно, 102). –
Это действительно помогло. Спасибо за ответ. –