{"id":1587,"date":"2015-03-17T18:21:27","date_gmt":"2015-03-17T18:21:27","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=1587"},"modified":"2015-05-30T18:58:35","modified_gmt":"2015-05-30T18:58:35","slug":"obtenir-le-taux-doccupation-du-cpu","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=1587","title":{"rendered":"Obtenir le taux d&rsquo;occupation du CPU"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/cpu1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-1674\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/cpu1.png\" alt=\"cpu\" width=\"458\" height=\"474\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/cpu1.png 594w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/cpu1-290x300.png 290w\" sizes=\"(max-width: 458px) 100vw, 458px\" \/><\/a><\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p>Dans cet article nous verrons comment obtenir le taux de consommation total du CPU de votre <strong>syst\u00e8me<\/strong> et puis comment obtenir le taux de consommation du CPU du <strong>processus<\/strong> de votre application.<\/p>\n<p>Pour info, j&rsquo;ai d\u00e9j\u00e0 r\u00e9dig\u00e9 un article sur un sujet adjacent : les <a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/?p=140\">informations syst\u00e8me<\/a>.<\/p>\n<p><strong>Pr\u00e9requis :<\/strong><\/p>\n<p>Savoir lire un peu du C++.<\/p>\n<p><strong>Explications :<\/strong><\/p>\n<p>Cr\u00e9ez un fichier CPUTimer.h :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#ifndef CPU_TIMER_H\r\n#define CPU_TIMER_H\r\n\r\n#include &lt;pdh.h&gt;\r\n\r\n#pragma comment(lib, &quot;pdh.lib&quot;)\r\n\r\nclass CPUTimer\r\n{\r\npublic:\r\n\u00a0\u00a0 \u00a0CPUTimer();\r\n\r\n\u00a0\u00a0 \u00a0virtual ~CPUTimer();\r\n\r\n\u00a0\u00a0 \u00a0void Initialize();\r\n\u00a0\u00a0 \u00a0void Frame();\r\n\r\n\u00a0\u00a0 \u00a0int GetCpuTotalPercentage();\r\n\u00a0\u00a0 \u00a0int GetCpuProcessPercentage();\r\n\r\nprivate:\r\n\r\n\u00a0\u00a0 \u00a0\/* Consommation CPU total du syst\u00e8me *\/\r\n\u00a0\u00a0 \u00a0HQUERY m_queryHandle;\r\n\u00a0\u00a0 \u00a0HCOUNTER m_counterHandle;\r\n\u00a0\u00a0 \u00a0unsigned long m_lastSampleTime;\r\n\u00a0\u00a0 \u00a0double m_cpuTotalUsage;\r\n\u00a0\u00a0 \u00a0double m_cpuProcessUsage;\r\n\r\n\u00a0\u00a0 \u00a0\/* Consommation CPU de l'application *\/\r\n\u00a0\u00a0 \u00a0ULARGE_INTEGER lastCPU, lastSysCPU, lastUserCPU;\r\n\u00a0\u00a0\u00a0 int numProcessors;\r\n\u00a0\u00a0\u00a0 HANDLE self;\r\n};\r\n\r\n#endif\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>On acc\u00e8de aux pourcentages de consommation du CPU par le biais des fonctions :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nGetCpuTotalPercentage();\r\nGetCpuProcessPercentage();\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Cr\u00e9ez un fichier CPUTimer.cpp :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &quot;CPUTimer.h&quot;\r\n\r\nCPUTimer::CPUTimer()\r\n{\r\n}\r\n\r\nCPUTimer::~CPUTimer()\r\n{\r\n\u00a0\u00a0 \u00a0PdhCloseQuery(m_queryHandle);\r\n}\r\n\r\nvoid CPUTimer::Initialize()\r\n{\r\n\u00a0\u00a0 \u00a0m_cpuTotalUsage = 0;\r\n\u00a0\u00a0 \u00a0m_cpuProcessUsage = 0;\r\n\r\n\u00a0\u00a0 \u00a0\/* Consommation CPU total du syst\u00e8me *\/\r\n\r\n\u00a0\u00a0 \u00a0PDH_STATUS status;\r\n\r\n\u00a0\u00a0 \u00a0status = PdhOpenQuery(NULL, NULL, &amp;m_queryHandle);\r\n\r\n\u00a0\u00a0 \u00a0status = PdhAddEnglishCounter(m_queryHandle, TEXT(&quot;\\\\Processor(_Total)\\\\% processor time&quot;), NULL, &amp;m_counterHandle);\r\n\r\n\u00a0\u00a0 \u00a0\/***************************************\/\r\n\r\n\u00a0\u00a0 \u00a0\/* Consommation CPU de l'application *\/\r\n\r\n\u00a0\u00a0 \u00a0SYSTEM_INFO sysInfo;\r\n\u00a0\u00a0 \u00a0FILETIME ftime, fsys, fuser;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0GetSystemInfo(&amp;sysInfo);\r\n\u00a0\u00a0 \u00a0numProcessors = sysInfo.dwNumberOfProcessors;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0GetSystemTimeAsFileTime(&amp;ftime);\r\n\u00a0\u00a0 \u00a0memcpy(&amp;lastCPU, &amp;ftime, sizeof(FILETIME));\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0self = GetCurrentProcess();\r\n\r\n\u00a0\u00a0 \u00a0GetProcessTimes(self, &amp;ftime, &amp;ftime, &amp;fsys, &amp;fuser);\r\n\r\n\u00a0\u00a0 \u00a0memcpy(&amp;lastSysCPU, &amp;fsys, sizeof(FILETIME));\r\n\u00a0\u00a0 \u00a0memcpy(&amp;lastUserCPU, &amp;fuser, sizeof(FILETIME));\r\n\r\n\u00a0\u00a0 \u00a0m_lastSampleTime = GetTickCount();\r\n}\r\n\r\nvoid CPUTimer::Frame()\r\n{\r\n    \/\/ On met \u00e0 jour les informations toutes les secondes\r\n\u00a0\u00a0 \u00a0if ((m_lastSampleTime + 1000) &lt; GetTickCount())\r\n\u00a0\u00a0 \u00a0{\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0m_lastSampleTime = GetTickCount(); \r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Consommation CPU total du syst\u00e8me *\/\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PDH_FMT_COUNTERVALUE value; \r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PdhCollectQueryData(m_queryHandle);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PdhGetFormattedCounterValue(m_counterHandle, PDH_FMT_LONG, NULL, &amp;value);\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0m_cpuTotalUsage = value.longValue;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Consommation CPU de l'application *\/\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0FILETIME ftime, fsys, fuser;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ULARGE_INTEGER now, sys, user;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0double percent;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0GetSystemTimeAsFileTime(&amp;ftime);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0memcpy(&amp;now, &amp;ftime, sizeof(FILETIME));\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0GetProcessTimes(self, &amp;ftime, &amp;ftime, &amp;fsys, &amp;fuser);\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0memcpy(&amp;sys, &amp;fsys, sizeof(FILETIME));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0memcpy(&amp;user, &amp;fuser, sizeof(FILETIME));\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0percent = (sys.QuadPart - lastSysCPU.QuadPart) +\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0(user.QuadPart - lastUserCPU.QuadPart);\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0percent \/= (now.QuadPart - lastCPU.QuadPart);\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0percent \/= numProcessors;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0lastCPU = now;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0lastUserCPU = user;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0lastSysCPU = sys;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0m_cpuProcessUsage = percent * 100;\r\n\u00a0\u00a0 \u00a0}\r\n}\r\n\r\nint CPUTimer::GetCpuTotalPercentage()\r\n{\r\n\u00a0\u00a0 \u00a0return m_cpuTotalUsage;\r\n}\r\n\r\nint CPUTimer::GetCpuProcessPercentage()\r\n{\r\n\u00a0\u00a0 \u00a0return m_cpuProcessUsage;\r\n}\r\n<\/pre>\n<p><strong><br \/>\nR\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Dans cet article nous avons appris comment obtenir le taux d&rsquo;occupation du CPU de votre syst\u00e8me <strong>mais aussi<\/strong> de votre application !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : Dans cet article nous verrons comment obtenir le taux de consommation total du CPU de votre syst\u00e8me et puis comment obtenir le taux de consommation du CPU du processus de votre application. Pour info, j&rsquo;ai d\u00e9j\u00e0 r\u00e9dig\u00e9 un article sur un sujet adjacent : les informations syst\u00e8me. Pr\u00e9requis : Savoir lire un peu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/1587"}],"collection":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1587"}],"version-history":[{"count":30,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/1587\/revisions"}],"predecessor-version":[{"id":2600,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/1587\/revisions\/2600"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}