如何在进程中查找单个线程的CPU利用率

时间:2009-07-29 12:32:52

标签: c++ c multithreading cpu cpu-usage

我正在寻找一个如何在VC ++中查找进程内单个线程的CPU利用率的工具。

如果任何人能为我提供工具,那将会非常充实。

如果你们以编程方式提供如何做的话,也可能会更好。

先谢谢你。

3 个答案:

答案 0 :(得分: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 :(得分:3)

尝试使用process explorer ..(工具)..非常实用..

http://download.cnet.com/Process-Explorer/3000-2094_4-10223605.html

答案 2 :(得分:2)

我确定你在这里询问Windows,但为了完整起见,我将描述在Unix系统上可以做到的一种方法。

/ proc文件系统包含有关计算机上所有正在运行的进程的信息。在这个目录中,你会找到系统上每个进程的子目录(由pid命名),这些目录中的每一个都是一个名为stat的文件。查看'man proc'并搜索“stat”条目。此文件包含大量信息,但可以使用几个字段来确定此进程消耗了多少用户和内核模式时间。

掌握了这些知识,找到一个名为“task”的进程的子目录......在这里,你将找到外部进程产生的所有子进程..如果你进入那些,你就是'发现每个都有一个stat文件。