Delphi7でIndy9を使用しています。ロングワード (Athread.Handle) を TIDPEERTHREAD ポインターにキャストしたいと思います。これを行う方法はありますか?または、ポインターをロングワードに「保存」できる他の方法はありますか?
前もって感謝します。
TIdPeerThread
TThread
子孫です。そのHandle
プロパティには、からのOSレベルのスレッドハンドルが含まれていますCreateThread()
。値をオブジェクトポインタHandle
に直接キャストする方法はありません。TIdPeerThread
次のいずれかを行う必要があります。
1)値の代わりにTIdPeerThread
オブジェクトポインタ自体を格納し、必要に応じてキャストバックします。LongWord
TIdPeerThread.Handle
var
LW: LongWord;
Peer: TIdPeerThread;
Peer := ...;
LW := LongWord(Peer);
...
Peer := TIdPeerThread(LW);
TIdPeerThead.Handle
2)値をに格納し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;