我将 Indy9 与 Delphi7 一起使用。我想将 Longword (Athread.Handle) 转换回 TIDPEERTHREAD 指针。有没有办法我可以做到这一点?或者有没有其他方法可以“存储”指向长字的指针?
先感谢您。
TIdPeerThread是TThread后代。它的Handle属性包含来自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;