2012-04-27 1 views
1

Я использую Indy9 с Delphi7. Я хотел бы бросить длинное ружье (Athread.Handle) обратно указателю TIDPEERTHREAD. Есть ли способ, как я мог это сделать? Или есть другой способ, которым я мог бы «хранить» указатель на длинное слово?IndyHandle to TIDPEERTHREAD

Благодарим вас в Advance.

ответ

2

TIdPeerThread является потомком TThread. Свойство Handle содержит дескриптор уровня OS-уровня от 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; 
+0

Спасибо за ответ. Не могли бы вы показать мне небольшой пример того, как я могу хранить TIdPeerThread в Longword и отбрасывать его назад? Заранее спасибо. –

+2

Я обновил свой ответ, но мне действительно нужно показать вам, как приписывать указатель на целое число и обратно? Это программирование Delphi 101 (возможно, возможно, 102). –

+0

Это действительно помогло. Спасибо за ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^