我用ThreadMgrPool管理 idTCPServr的线程,我记录了其中的一个AThread的ThreadID,保存到了变量a中。
请问,不用循环,我如何通过变量a,立刻找出此线程。主要是考虑到服务器繁忙时的效率问题

解决方案 »

  1.   

    抄来的,仅供参考怎样知道当前窗口是那个EXE文件运行时创建的 
    //还有别忘了在 uses 部分加上TLHelp32单元 
    function GetAppName(const AWindowHandle: THandle): string; 
    var 
     PI: DWORD; 
     ContinueLoop:BOOL; 
     SnapshotHandle:THandle; 
     ProcessEntry32:TProcessEntry32; 
    begin 
     Result := ''; 
     GetWindowThreadProcessId(AWindowHandle, @PI);  SnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
     ProcessEntry32.dwSize := Sizeof(ProcessEntry32); 
     ContinueLoop := Process32First(SnapshotHandle,ProcessEntry32); 
     while ContinueLoop do 
     begin 
       if ProcessEntry32.th32ProcessID = PI then 
       begin 
         Result := ProcessEntry32.szExeFile; 
         break; 
       end; 
       ContinueLoop:=Process32Next(SnapshotHandle, ProcessEntry32); 
     end; 
     CloseHandle(SnapshotHandle); 
    end; 用以上的方法找到窗口HANDLE和PROCESSID后,用GETWINDOWTHREADPROCESS这个API函数可以得到创建窗口的PROCESSID,再和PROCESSID比较一下,可以找到! 
      

  2.   

    使用OpenThread