6

重複の可能性:
デフォルトのVCLアプリケーションの他のスレッドは何ですか?それらは目的によって名前を付けることができますか?

Delphi XE2(32ビット)で新しい空のVCLフォームアプリケーションを実行すると、このアプリケーションのタスクマネージャーで4つのスレッドが実行されているのがわかります。明らかに、どのアプリにも少なくとも1つのスレッドが必要ですが、この場合、他の3つのスレッドは何ですか?VCLフォームアプリケーションがデフォルトで実行するスレッドについて理解を深めたいと思います。RAD Studioからデバッグモードで実行しているのではないかと思ったので、EXEを自分で起動し、4つのスレッドも実行していました。また、「リリース」構成でコンパイルを試みました(したがって、デバッグ情報のコンパイルを無効にしました)。まだ4つのスレッドがあります。

ここに画像の説明を入力してください

4

2 に答える 2

8

スレッドのソースを特定するには、プロセス エクスプローラープロセス ハッカーなどのツールを使用して、スレッドの開始アドレスを調べることができます。

ここに画像の説明を入力

この場合、たとえば、次のことがわかります

  • ntdll.dll!TpCallbackIndependent+0x????? これは、Windows スレッドプール API の一部です。
  • ntdll.dll!RtlMoveMemory+0x????? RtlMoveMemory WinAPI 関数の呼び出しです。
  • プロジェクト??.Exe+0x????? アプリのメインスレッド。
于 2012-07-02T04:51:41.833 に答える
5

私のコンピューターでは、Wtsapi32.WTSRegisterSessionNotification APIを使用してセッション変更通知を受信するようにアプリケーションのウィンドウが登録されているため、メインスレッド以外のすべてのスレッドが作成されます。Vcl.Forms->TApplication.CreateHandleプロシージャ内の実装を確認できます。これは、ターミナルサービス/リモートデスクトップを介してログインしたときのアプリケーションの動作/外観と関係がある必要があります。他のプログラムが実行可能ファイルにコードをロードしたため、他のスレッドが存在する可能性があります。

于 2012-07-02T06:35:41.937 に答える