2012-05-04 5 views
4

wmiクエリ(すべてのスレッドと各スレッドの詳細情報)を使用してプロセス情報を要求するアプリケーションが見つかりました。このアプリケーションを変更して、スレッドごとのCPU使用率を調べました。 (私のアプリケーションが「appy」と呼ばれている場合、スレッドは「appy/0」、「appy/1」などと呼ばれます)デバッグ環境外でDelphiアプリケーションのスレッドを特定する

私の質問: IDEまたは別のデバッグ環境

私はNameThreadForDebuggingメソッドがあることを知っていますが、これはデバッグ環境の外ではアクセスできません。

スレッドの作成時に独自のスレッドIDを割り当てる方法はありますか? 辞書を作成して誰がwho(スレッド)であるかを知り、その辞書をファイルに書き込んで外部にアクセスできる唯一の方法です。

ありがとうございます!

答えて

4

いいえ、独自のスレッドIDを割り当てることはできません。スレッドIDはCreateThread関数によってスレッドに割り当てられ、その存続期間中は変更できません。また、外部アプリケーション(デバッガではない)のスレッドを識別する唯一の方法は、何らかの形でそのスレッド識別情報を共有することだと述べました。

ファイルを介して情報を共有する必要はありませんが、たとえば共有メモリブロックを使用できます。ファイルを使用するよりもはるかに効率的です。

スレッドIDについての参照は、あなたがGetCurrentThreadId機能によって発言を取ることができたよう:スレッド終了するまで

、スレッド識別子が一意にシステム全体 スレッドを識別します。

+3

私が正しい答えを見つけたら、良い解決策は、threadID/threadNameペアのリストで共通のメモリブロックを保持しているdllであり、監視されているアプリケーションと監視しているアプリケーションの両方に対してこのリストで機能する関数を提供します。 – kludg

関連する問題