怎样得到一个已知线程的父线程?(20分)

  • 主题发起人 主题发起人 satanmonkey
  • 开始时间 开始时间
S

satanmonkey

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样得到一个已知线程的父线程?
 
用 Toolhelp32
 
 在操作系统眼里  线程好象     并没有 主次 之分
 
to :esuper2000<br>toolhelp32里哪里有?<br><br>to:刘麻子<br>我只是想知道那个线程创造的这个已知线程
 
win98 win2k都支持toolhelp32,但winnt不支持
 
我知道toolhelp32,我是问toolhelp32的那部分功能做到找到父线程?
 
TProcessEntry32.th32ParentProcessID
 
线程归属于进程,好像没有公开的 API 能获得父线程。<br>另外,父线程可能先于子线程终止。
 
在Delphi有好多方法来创建了线程,但是本质上都是调用CreateThread这个API来创建的<br><br>在windows操作系统时候 Delphi 线程类创建过程如下:<br>constructor TThread.Create(CreateSuspended: Boolean);<br>begin<br>&nbsp; inherited Create;<br>&nbsp; AddThread;<br>&nbsp; FSuspended := CreateSuspended;<br>&nbsp; FCreateSuspended := CreateSuspended;<br>&nbsp; FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), CREATE_SUSPENDED, FThreadID);<br>&nbsp; if FHandle = 0 then<br>&nbsp; &nbsp; raise EThread.CreateResFmt(@SThreadCreateError, [SysErrorMessage(GetLastError)]);<br>end;<br><br>实际上是调用了 Delphi 中的函数 BeginThread来创建一个线程,<br>而BeginThread过程如下:<br>function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord;<br>&nbsp; ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord;<br>&nbsp; var ThreadId: LongWord): Integer;<br>var<br>&nbsp; P: PThreadRec;<br>begin<br>&nbsp; New(P);<br>&nbsp; P.Func := ThreadFunc;<br>&nbsp; P.Parameter := Parameter;<br>&nbsp; IsMultiThread := TRUE;<br>&nbsp; Result := CreateThread(SecurityAttributes, StackSize, @ThreadWrapper, P,<br>&nbsp; &nbsp; CreationFlags, ThreadID);<br>end;<br><br>最终都是调用了 CreateThread。。。 [:D]<br>
 
后退
顶部