我将 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;