ronenmagid1
asked on
Get Process List with their current CPU utilization percentage
For a Win32 C++ console application, I need to be able to enumerate the list of processes and get a CPU utilization percentage for each process, similar to what appears in the task manager.
I can't use .NET
I can't use Delphi (for some reason so many examples are for delphi)
I can only use Win32 and C++.
How do I achieve that?
I can't use .NET
I can't use Delphi (for some reason so many examples are for delphi)
I can only use Win32 and C++.
How do I achieve that?
ASKER
thanks pgnatyuk, this is to enumerate processes, anything on getting their current CPU utilization % snapshot?
I think everything's explained in this article:
Determine CPU usage of current process (C++ and C#)
http://www.philosophicalgeek.com/2009/01/03/determine-cpu-usage-of-current-process-c-and-c/
Determine CPU usage of current process (C++ and C#)
http://www.philosophicalgeek.com/2009/01/03/determine-cpu-usage-of-current-process-c-and-c/
ASKER
One thing that's unclear about GetProcessTimes is the timespan. This seems like a statistical tool that can tell me,
"your application has been up for 5 weeks"
"your application used 1 week of CPU time"
Therefore I can deduce that overall, my process took 20% of the CPU during its lifetime.
however, what if I need a more "real time" monitoring? what if an app that took 1% over two weeks suddenly peaks to 99% CPU? how will I catch that in real time like TASK MANAGER does? This is really what I'm interested in, not over-time statistics but a rather "current" snapshot, based on the last x seconds.
Is there anything like that I can already use? or do I simply have to track the process for those X seconds and, monitor the elapsed time, and "sample" its CPU usage myself using deltas?
I mean, I can do this myself, but was wondering whether there's a ready made value I can pick up somewhere.
"your application has been up for 5 weeks"
"your application used 1 week of CPU time"
Therefore I can deduce that overall, my process took 20% of the CPU during its lifetime.
however, what if I need a more "real time" monitoring? what if an app that took 1% over two weeks suddenly peaks to 99% CPU? how will I catch that in real time like TASK MANAGER does? This is really what I'm interested in, not over-time statistics but a rather "current" snapshot, based on the last x seconds.
Is there anything like that I can already use? or do I simply have to track the process for those X seconds and, monitor the elapsed time, and "sample" its CPU usage myself using deltas?
I mean, I can do this myself, but was wondering whether there's a ready made value I can pick up somewhere.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Another approach (performance counters):
http://www.codeproject.com/KB/system/cpuusageByDudiAvramov.aspx
http://www.codeproject.com/KB/system/cpuusageByDudiAvramov.aspx
Windows SysInternals. Process Explorer v12.04
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
http://msdn.microsoft.com/en-us/library/ms682623(VS.85).asp
This is a Win32 console application.