1

我将 Indy9 与 Delphi7 一起使用。我想将 Longword (Athread.Handle) 转换回 TIDPEERTHREAD 指针。有没有办法我可以做到这一点?或者有没有其他方法可以“存储”指向长字的指针?

先感谢您。

4

1 回答 1

2

TIdPeerThreadTThread后代。它的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;
于 2012-04-27T20:07:56.197 回答