查看某个进程和线程的cpu使用率

查看某个进程和线程的cpu使用率

 

在实际开发中发现有时自己开发的程序使用率非常的高, 以致于影响到机器上其他程序的正常运行. 这时我们该怎么办呢?

 

首先应该想到的, 也是最佳解决方法是找到进程中使用cpu最多的那个线程( 怎样找到cpu使用最多的线程, 暂不在这里讨论 ), 然后进行优化它. 当然还有另外一种就是限制程序的cpu使用率的峰值. 当进程的使用率达到限定的峰值时, 就让他睡眠 sleep( 0 ), 或者WaitForSingleObject. 注意这里提到的进程的cpu使用率其实进程中所有线程的cpu使用率的总和. 从这个意义上来说的话,其实限制某个进程的cpu使用率就是限制进程中线程的cpu使用率.

 

那么我们怎么得到线程的cpu的使用率呢?

可以使用系统提供的下列两个函数:

GetThreadTimes 和 GetProcessTimes . 这2个函数的详细信息可以参看msdn. 函数的最后2个参数返回的是进程/线程在内核模式和用户态模式运行的时间. 我们可以一定的时间间隔获取此2值和之前的获取的此2值做差值, 就得到线程/进程在该时间间隔内的运行在cpu上的时间, 用这个时间除以时间间隔就得到对应的cpu的使用率, 如运行时间是10ms, 时间间隔为1000ms, 那么cpu使用率就是1%了.

 

如果我们只是查看线程/进程的cpu使用率, 上述时间间隔可以大一些, 如可以是1秒以上, 如果是要控制其使用率则要尽可能的小一些, 否则等你下次监测的时候已经超过很多时间或者超出设置的峰值太多了.但是这个值到底是多长合适, 这个需要写具体的测试程序去测试.

 

 

以上描述的是怎么样获取进程和线程的, 也许有时需要整个系统的cpu使用率, 这个时候可以采用GetSystemTimes, 有了这个函数, 剩下的工作就和上面描述的一样.

 

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *