1

Delphi7でIndy9を使用しています。ロングワード (Athread.Handle) を TIDPEERTHREAD ポインターにキャストしたいと思います。これを行う方法はありますか?または、ポインターをロングワードに「保存」できる他の方法はありますか?

前もって感謝します。

4

1 に答える 1

2

TIdPeerThreadTThread子孫です。そのHandleプロパティには、からのOSレベルのスレッドハンドルが含まれていますCreateThread()。値をオブジェクトポインタHandleに直接キャストする方法はありません。TIdPeerThread次のいずれかを行う必要があります。

1)値の代わりにTIdPeerThreadオブジェクトポインタ自体を格納し、必要に応じてキャストバックします。LongWordTIdPeerThread.Handle

var
  LW: LongWord;
  Peer: TIdPeerThread;

Peer := ...;
LW := LongWord(Peer);
...
Peer := TIdPeerThread(LW);

TIdPeerThead.Handle2)値をに格納し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 に答える