Windowsでスレッドの名前を設定する直感的ではないプロセスがあります(「How to set name to a Win32 Thread?」を参照)。スレッドの名前を取得する方法はありますか?私はこれを可能にするWindows APIは表示されません(http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx)。Win32スレッドの名前を取得するには?
13
A
答えて
12
スレッド名などは存在しないため、このようなWinAPI呼び出しはありません。
スレッド名を設定すると、IDEのデバッガがそれを保存し、デバッグしやすくなります。 しかし、名前は実際にはWindows API呼び出しによってスレッドにアタッチされることはありません。
デバッガを使用せずにアプリケーションを実行すると、スレッド名を設定しても効果はありません。したがって、名前を取得することはできません。
アクセス可能であれば、デバッガが接続されている場合にのみ動作するコードは作成しません。ハンドルと一緒に自分の名前を保存してください。
17
スレッドは実際にはWin32では名前を持っていません。 RaiseException
経由のプロセスは、実際にTID =>名前マッピングを格納しているVSデバッガの「シークレットハンドシェイク」に過ぎません。 Windows自体には、スレッド「Name」という概念はありません。
7
Windowsの10からは、スレッドの名前を設定するのにSetThreadDescription()
が使用されたと仮定して、GetThreadDescription()
を使用してスレッドの名前を取得できるようになりました。ここで
は例です:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt774972(v=vs.85).aspx
それはどのような方法であなたを助けている場合は、スレッドの開始関数名を取得することができます
ここにドキュメントがあります。 – Nawaz
@Nawazどうやってやるの? –
@CS:これらのAPIを使用する必要があります。[SymInitialize](http://msdn.microsoft.com/en-us/library/windows/desktop/ms681351%28v=vs.85%29.aspx) [SymFromAddr](http://msdn.microsoft.com/en-us/library/windows/desktop/ms681323%28v=vs.85%29.aspx)私はそれらを使用して、このトピックを参照してください:[別のプロセスからWin32スレッドのStartAddressを取得](http://stackoverflow.com/questions/8679406/get-startaddress-of-win32-thread-from-another-process) – Nawaz