2009-07-29 5 views
1

VC++のプロセス内の単一スレッドのCPU使用率を見つける方法に関するツールを探しています。プロセス内の単一スレッドのCPU使用率を確認する方法

いずれかが私にツールを提供することができれば、それは素晴らしいことでしょう。

また、プログラマチックに行う方法を提供する方が良い場合もあります。

ありがとうございました。

答えて

3

おそらくGetThreadTimesを使用すると役に立ちますか?

スレッドがのラインで何か(テストしていません)になり、別の実行可能、に属している場合は手の込んだ:

// Returns true if thread times could be queried and its results are usable, 
// false otherwise. Error handling is minimal, considering throwing detailed 
// exceptions instead of returning a simple boolean. 
bool get_remote_thread_times(DWORD thread_id, FILETIME & kernel_time, FILETIME & user_time) 
{ 
    FILETIME creation_time = { 0 }; 
    FILETIME exit_time = { 0 }; 
    HANDLE thread_handle = OpenThread(THREAD_QUERY_INFORMATION, FALSE, thread_id); 
    if (thread_handle == INVALID_HANDLE) return false; 

    bool success = GetThreadTimes(thread_handle, &creation_time, &exit_time, &kernel_time, &user_time) != 0; 

    CloseHandle(thread_handle); 
    return success; 
} 
1

私はあなたがここでのWindowsについて尋ねていると確信しているが、完全性のために、私はこれはUnixシステム上で行うことができる一つの方法を説明します。

/procファイルシステムには、実行中のすべてのプロセスに関する情報が含まれています。このディレクトリには、システム上のすべてのプロセス(pidという名前)のサブディレクトリがあります。これらのディレクトリの中にはstatというファイルがあります。 'man proc'を見て「stat」エントリーを検索してください。このファイルには一連の情報が含まれていますが、このプロセスが消費したユーザーモードとカーネルモードの時間を決定するためにいくつかのフィールドを使用できます。

"タスク"と呼ばれるプロセスのサブディレクトリを探してください。ここでは、外部プロセスによって生成されたすべての子プロセスを見つけることができます。それぞれにstatファイルがあることがわかります。