<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CPU Auslastung beim QuadCore]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ja schon diesen Artikel gefunden: <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1177579.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1177579.html</a></p>
<p>So nutze ich das auch..</p>
<p>so, jetzt aber zu meinem Problem:</p>
<p>Ich habe einen QuadCore und möchte die CPU-Last pro Core ermitteln. Aber irgendwie funzt das nicht richtig. Der Wert für Core1 und Core2 stimmt, aber der Wert für Core3 + Core4 ist immer das gleiche für Core2.. Ich hab schon das halbe Netz durchsucht...</p>
<p>Weiß jemand Rat?</p>
<p>Machine</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205510/cpu-auslastung-beim-quadcore</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 08:50:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205510.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Feb 2008 08:51:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Fri, 15 Feb 2008 08:51:26 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ja schon diesen Artikel gefunden: <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1177579.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1177579.html</a></p>
<p>So nutze ich das auch..</p>
<p>so, jetzt aber zu meinem Problem:</p>
<p>Ich habe einen QuadCore und möchte die CPU-Last pro Core ermitteln. Aber irgendwie funzt das nicht richtig. Der Wert für Core1 und Core2 stimmt, aber der Wert für Core3 + Core4 ist immer das gleiche für Core2.. Ich hab schon das halbe Netz durchsucht...</p>
<p>Weiß jemand Rat?</p>
<p>Machine</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456314</guid><dc:creator><![CDATA[Machine]]></dc:creator><pubDate>Fri, 15 Feb 2008 08:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Fri, 15 Feb 2008 10:43:42 GMT]]></title><description><![CDATA[<p>Welche der beiden Varianten hast Du verwendet? WMI? Damit sollte es gehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456394</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 15 Feb 2008 10:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Fri, 15 Feb 2008 10:47:52 GMT]]></title><description><![CDATA[<p>oh ich sehe grad, dass ich wohl doch eine andere variante hab... is schon ne weile her <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> hier mal die files:</p>
<p>.h:</p>
<pre><code class="language-cpp">#pragma once

#ifndef 	__CPULOAD_H__
#define 	__CPULOAD_H__

class CCpuLoad
{
public:
	CCpuLoad();
	virtual ~CCpuLoad();

protected:
	int CpuInit();					// Initialisierung
	int CpuExit();					// Deinitialisierung

public:
	int GetCpuCount();					// CPU-Anzahl abfragen
	int UpdateCpu();				// CPU-Auslastungsdaten holen
	int GetCpuLoad(unsigned uCpu);		// CPU-Auslastungs für eine CPU abfragen

};
#endif
</code></pre>
<p>.cpp:</p>
<pre><code class="language-cpp">#include	&lt;windows.h&gt;
#include	&quot;CpuLoad.h&quot;

#define	PROCESSOR_IDX	238
#define CPU_USAGE_IDX	6

static	HKEY		 hWin9xKey    = 0;
static	BOOL		 bIsWinNt	  = 0;
static	DWORD		 dwDataSize   = 0;
static	DWORD		 dwWin9xUsage = 0;
static	__int64		*pCounterAct  = 0;
static	__int64		*pCounterPre  = 0;
static	__int64		 iSysTimeAct  = 1;
static	__int64		 iSysTimePre  = 0;
static	unsigned	 uCpuCount    = 0;
static	union
{
	PERF_DATA_BLOCK			*o;
	BYTE					*b;
}pData;
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
CCpuLoad::CCpuLoad()
{
	CpuInit();
}
//---------------------------------------------------------------------------------------

CCpuLoad::~CCpuLoad()
{
    CpuExit();
}
//---------------------------------------------------------------------------------------
//*****************************************************************************
//*
//*		CpuUpdate
//*
//*****************************************************************************
//	Holt die neuesten Daten für die CPU-Auslastung
//	Ergibt 1 wenn ok sonst 0
int CCpuLoad::UpdateCpu()
{
	DWORD dwSize;
	int iError;
	unsigned u;
	union
	{
		PERF_OBJECT_TYPE		*o;
		BYTE					*b;
	}pType;
	union
	{
		PERF_COUNTER_DEFINITION	*o;
		BYTE					*b;
	}pCounter;
	union
	{
		PERF_INSTANCE_DEFINITION*o;
		BYTE					*b;
	}pInstance;
	union
	{
		PERF_COUNTER_BLOCK		*o;
		BYTE					*b;
	}pBlock;

	for(;;)
	{
		dwSize = dwDataSize;
		iError = RegQueryValueEx( HKEY_PERFORMANCE_DATA, &quot;238&quot;, 0, 0,pData.b,&amp;dwSize);

		if( iError != ERROR_MORE_DATA )
			break;
		dwDataSize += 256;

		if( pData.o )
			delete pData.o;
		pData.b = new BYTE[dwDataSize];
	}

	if( iError != ERROR_SUCCESS || !pData.o )
	{
		if( pData.o )
			delete pData.o;
		return 0;
	}

	pType.b = ( (BYTE*)pData.o ) + pData.o-&gt;HeaderLength;

	for( u = 0; u &lt; pData.o-&gt;NumObjectTypes; u++ ) 
	{
		if( pType.o-&gt;ObjectNameTitleIndex == PROCESSOR_IDX )
			break;
		pType.o += pType.o-&gt;TotalByteLength;
	}

	if( u &gt;= pData.o-&gt;NumObjectTypes )
	{
		delete pData.o;
		return 0;
	}

	if( ! uCpuCount &amp;&amp; pType.o-&gt;NumInstances &gt; (int) uCpuCount )
	{
		uCpuCount = pType.o-&gt;NumInstances;
		pCounterAct  = new __int64[uCpuCount*2];
		pCounterPre = pCounterAct+uCpuCount;
	}

	pCounter.b = pType.b + pType.o-&gt;HeaderLength;

	for( u = 1; u &lt; pType.o-&gt;NumCounters; u++ )
	{
		if( pCounter.o-&gt;CounterNameTitleIndex == CPU_USAGE_IDX )
			break;
		pCounter.b += pCounter.o-&gt;ByteLength;
	}

	if( u &gt;= pType.o-&gt;NumCounters )
	{
		delete pData.o;
		return 0;
	}

	pInstance.b = pType.b + pType.o-&gt;DefinitionLength;

	for( u = 0; (int) u &lt; pType.o-&gt;NumInstances; u++ )
	{
		pBlock.b = pInstance.b + pInstance.o-&gt;ByteLength;

		pCounterPre[u] = pCounterAct[u];
		pCounterAct [u] =* (__int64*)( pBlock.b + pCounter.o-&gt;CounterOffset );
		pInstance.b = pBlock.b + pBlock.o-&gt;ByteLength;
	}

	iSysTimePre = iSysTimeAct;
	SystemTimeToFileTime(&amp;pData.o-&gt;SystemTime,(LPFILETIME)&amp;iSysTimeAct);

	if( iSysTimePre == iSysTimeAct )
		iSysTimeAct++;

	return 1;
}
//---------------------------------------------------------------------------------------
//*****************************************************************************
//*
//*		CpuInit
//*
//*****************************************************************************
//	Initialisiert die CPU-Auslastungsberechnung
//	Ergibt 1 wenn ok sonst 0
int CCpuLoad::CpuInit()
{
	DWORD dwVersion;

	dwVersion = GetVersion();
	dwVersion = ( ( dwVersion &amp; 0xFF00 ) &gt;&gt; 8 ) | ( ( dwVersion &amp; 0x00FF ) &lt;&lt; 8 );

	if( dwVersion &gt;= 0x0500 || dwVersion == 0x0400 || dwVersion == 0x0300 )
		bIsWinNt = TRUE;

	if(!UpdateCpu())
		return 0;

	return 1;
}
//---------------------------------------------------------------------------------------
//*****************************************************************************
//*
//*		CpuExit
//*
//*****************************************************************************
//	Gibt alle Speicherbereiche wieder frei
//	Ergibt 1 wenn ok sonst 0
int CCpuLoad::CpuExit()
{

	dwDataSize = 0;
	uCpuCount  = 0;

	if(pCounterAct)
	{
		delete pCounterAct;
		pCounterAct = 0;
		pCounterPre = 0;
	}
	if( pData.b )
	{
		delete pData.b;
		pData.b = 0;
	}
	if( hWin9xKey )
	{
		int		iError;
		HKEY	hKey;
		DWORD	dwSize,dwType;

		RegCloseKey(hWin9xKey);
		hWin9xKey = 0;

	    iError=RegOpenKeyEx(HKEY_DYN_DATA,&quot;PerfStats\\StopStat&quot;,0,KEY_ALL_ACCESS,&amp;hKey);

		if( iError != ERROR_SUCCESS )
			return 0;

		dwSize = sizeof(DWORD);

		RegQueryValueEx(hKey,&quot;KERNEL\\CPUUsage&quot;,0,&amp;dwType,(LPBYTE)&amp;dwWin9xUsage,&amp;dwSize);
		RegCloseKey(hKey);
	}

	return 1;
}
//---------------------------------------------------------------------------------------
//*****************************************************************************
//*
//*		CpuLoad
//*
//*****************************************************************************
//	Ergibt die aktuelle CPU-Auslastung (0 bis 1024)
//
//	uCpu	: Ist die Nummer der CPU
//
//	Danmit das funktioniert muss zuvor eine Zeit gewartet werden
//	und CpuUpdate aufgerufen werden
//	z.B.	Sleep(1000);
//			CpuUpdate();
//			CpuLoad(0);
//			CpuLoad(1);
//			...
int CCpuLoad::GetCpuLoad(unsigned uCpu)
{
	__int64	iValue;
	int		iLoad;

	if(uCpu&gt;=uCpuCount)
		return -1;

	if(!bIsWinNt)									// Windows 95/98
	{
		if(!hWin9xKey)
			return -1;
        iLoad = (dwWin9xUsage&lt;&lt;10) / 100;
	}
	else
	{											// Windows NT/2000/XP
		iValue   = pCounterAct[uCpu] - pCounterPre[uCpu];
		iValue &lt;&lt;= 10;
		iValue  /= iSysTimeAct - iSysTimePre;

		iLoad    = 1024 - (int) iValue;
	}

	if( iLoad &lt; 0 )
		iLoad=0;
	if( iLoad &gt; 1024 )
		iLoad = 1024;

	return iLoad;
}
//---------------------------------------------------------------------------------------
//*****************************************************************************
//*
//*		CpuCount
//*
//*****************************************************************************
//	Gibt die Anzah aller CPU's
int CCpuLoad::GetCpuCount()
{
	SYSTEM_INFO		sInfo;

	if(!uCpuCount)
		CpuInit();

	GetSystemInfo(&amp;sInfo);
	if( uCpuCount &lt; sInfo.dwNumberOfProcessors )
		return uCpuCount;

	return sInfo.dwNumberOfProcessors;
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1456398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456398</guid><dc:creator><![CDATA[Machine]]></dc:creator><pubDate>Fri, 15 Feb 2008 10:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Mon, 18 Feb 2008 10:14:42 GMT]]></title><description><![CDATA[<p>also ich bekomme bei GetCPUCount definitiv immer nur 2 raus, obwohl ich nen quadcore hab..<br />
hat jemand nen link zu der sache mit wmi?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458050</guid><dc:creator><![CDATA[Machine]]></dc:creator><pubDate>Mon, 18 Feb 2008 10:14:42 GMT</pubDate></item><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Mon, 18 Feb 2008 11:34:45 GMT]]></title><description><![CDATA[<p>Was für Betriebssystem hast Du?<br />
Je nach BS kann es sein, daß es nur 2 CPUs unterstützt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458094</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Mon, 18 Feb 2008 11:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Mon, 18 Feb 2008 11:41:34 GMT]]></title><description><![CDATA[<p>sorry, das hätte ich natürlich schreiben können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> das ist vista 32bit. im taskmanager wird die last jedes einzelnen cores angezeigt. iwi muss es also gehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458101</guid><dc:creator><![CDATA[Machine]]></dc:creator><pubDate>Mon, 18 Feb 2008 11:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Mon, 18 Feb 2008 11:50:46 GMT]]></title><description><![CDATA[<p>Ich behaupte mal, die Anweisung in CCpuLoad::GetCpuCount()</p>
<pre><code class="language-cpp">if( uCpuCount &lt; sInfo.dwNumberOfProcessors )
        return uCpuCount;
</code></pre>
<p>ist vermutlich der Übeltäter, daß als Ergebnis weniger als die tatsächliche CPU-Anzahl angegeben wird.</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458112</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Mon, 18 Feb 2008 11:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Tue, 19 Feb 2008 23:07:05 GMT]]></title><description><![CDATA[<p>Mmacher schrieb:</p>
<blockquote>
<p>Was für Betriebssystem hast Du?<br />
Je nach BS kann es sein, daß es nur 2 CPUs unterstützt...</p>
</blockquote>
<p>Welches BS unstützt denn bitte, wenn es schon 2 CPU's unterstützt, keine 4? (rhetorisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> )<br />
Das ziehlt doch eh aufs Multitasking/Multithreading, was Windows ja nun schon n bissl länger kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459179</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 19 Feb 2008 23:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to CPU Auslastung beim QuadCore on Wed, 20 Feb 2008 09:19:39 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>Welches BS unstützt denn bitte, wenn es schon 2 CPU's unterstützt, keine 4? (rhetorisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> )</p>
</blockquote>
<p>Schon klar, rein rhetorisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> .<br />
Lösung: Im Prinzip alle BS auf der WinNT-Schiene.<br />
Hinweis: Oft stehen sogar auf den Aufklebern mit den Seriennummern der Zusatz &quot;1-2 CPU&quot;, insbesondere in Verbindung mit Win2000 Pro.</p>
<p>Warum? Das sind einfach marketingpolitische Abstufungen seitens Mikrosoft: &quot;Wer mehr CPUs nutzen möchte, soll bitteschön die höherwertigen Editionen kaufen.&quot;<br />
Oder auf marketingdeutsch: &quot;skalierbare Lösungen&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Beispiel: WinServer2003 Datacenter kann bis 32 CPUs unterstützen (bzw. 64 CPUs in der x64-Edition), WinServer2003 Standard kann 4 CPUs, WinServer2003 Web dagegen nur Dual CPUs.<br />
Früher (auf jeden Fall bis Win2000) war Anzahl CPU = Anzahl Cores, heute (z.B. Vista) ist Anzahl CPU = Anzahl physikalischer Prozessoren, unabhängig von der Core-Anzahl des jeweiligen Prozessors.</p>
<p>Übrigens, das gleiche Phänomen kannst Du auch bei der nutzbaren RAM-Verwertung beobachten, guck Dir die aktuell verschiedenen Vista-Editionen an (Link habe ich nicht parat), sie können je nach Edition vershieden stark die CPUs und RAMs nutzen.</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459272</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Wed, 20 Feb 2008 09:19:39 GMT</pubDate></item></channel></rss>