<?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[warum keine 100%tige CPU auslastung??]]></title><description><![CDATA[<p>hab eine testanwendung mit 4 threads erstellt</p>
<p>die threads sind im testprogramm per winapi implementiert und die cpu-auslastung bei meinen dualcore (e6600) steigt nur auf 70%</p>
<p>wenn ich die threads per SDL-bibliothek implementiere läuft das programm schneller und die cpu-auslastung ist auf 100%</p>
<p>gibt es einen weg die auslastung auch per winapi auf 100% zu bringen ?</p>
<p>danke schonmal</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;

DWORD WINAPI ThreadFunktion0(LPVOID param)
{
	for(int a=0; a&lt;=100000 ;a++){
	printf(&quot;thread1\n&quot;);
	}
	return 0;
}

DWORD WINAPI ThreadFunktion1(LPVOID param)
{
	for(int b=0; b&lt;=100000; b++){ 
	printf(&quot;thread2\n&quot;);
	}
	return 0;
}

DWORD WINAPI ThreadFunktion2(LPVOID param)
{
	for(int c=0; c&lt;=100000; c++){ 
	printf(&quot;thread3\n&quot;);
	}
	return 0;
}

DWORD WINAPI ThreadFunktion3(LPVOID param)
{
	for(int d=0; d&lt;=100000; d++){ 
	printf(&quot;thread4\n&quot;);
	}
	return 0;
}

int main()
{
	DWORD threadId = 0;
	HANDLE threadHandle0 = CreateThread(
		0, // keine Security
		0, // default-Stack
		ThreadFunktion0,
		0, // kein Parameter
		0, // normal erzeugen
		&amp;threadId // threadId
		);

	HANDLE threadHandle1 = CreateThread(
		0, // keine Security
		0, // default-Stack
		ThreadFunktion1,
		0, // kein Parameter
		0, // normal erzeugen
		&amp;threadId + 1 // threadId
		);

	HANDLE threadHandle2 = CreateThread(
		0, // keine Security
		0, // default-Stack
		ThreadFunktion2,
		0, // kein Parameter
		0, // normal erzeugen
		&amp;threadId + 2 // threadId
		);

	HANDLE threadHandle3 = CreateThread(
		0, // keine Security
		0, // default-Stack
		ThreadFunktion3,
		0, // kein Parameter
		0, // normal erzeugen
		&amp;threadId + 3 // threadId
		);

	WaitForSingleObject(threadHandle0, INFINITE);
	WaitForSingleObject(threadHandle1, INFINITE);
	WaitForSingleObject(threadHandle2, INFINITE);
	WaitForSingleObject(threadHandle3, INFINITE);
	printf(&quot;\nEnd\n&quot;);
	getchar();

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/215625/warum-keine-100-tige-cpu-auslastung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 18:19:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215625.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Jun 2008 11:59:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Fri, 13 Jun 2008 12:00:40 GMT]]></title><description><![CDATA[<p>hab eine testanwendung mit 4 threads erstellt</p>
<p>die threads sind im testprogramm per winapi implementiert und die cpu-auslastung bei meinen dualcore (e6600) steigt nur auf 70%</p>
<p>wenn ich die threads per SDL-bibliothek implementiere läuft das programm schneller und die cpu-auslastung ist auf 100%</p>
<p>gibt es einen weg die auslastung auch per winapi auf 100% zu bringen ?</p>
<p>danke schonmal</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;

DWORD WINAPI ThreadFunktion0(LPVOID param)
{
	for(int a=0; a&lt;=100000 ;a++){
	printf(&quot;thread1\n&quot;);
	}
	return 0;
}

DWORD WINAPI ThreadFunktion1(LPVOID param)
{
	for(int b=0; b&lt;=100000; b++){ 
	printf(&quot;thread2\n&quot;);
	}
	return 0;
}

DWORD WINAPI ThreadFunktion2(LPVOID param)
{
	for(int c=0; c&lt;=100000; c++){ 
	printf(&quot;thread3\n&quot;);
	}
	return 0;
}

DWORD WINAPI ThreadFunktion3(LPVOID param)
{
	for(int d=0; d&lt;=100000; d++){ 
	printf(&quot;thread4\n&quot;);
	}
	return 0;
}

int main()
{
	DWORD threadId = 0;
	HANDLE threadHandle0 = CreateThread(
		0, // keine Security
		0, // default-Stack
		ThreadFunktion0,
		0, // kein Parameter
		0, // normal erzeugen
		&amp;threadId // threadId
		);

	HANDLE threadHandle1 = CreateThread(
		0, // keine Security
		0, // default-Stack
		ThreadFunktion1,
		0, // kein Parameter
		0, // normal erzeugen
		&amp;threadId + 1 // threadId
		);

	HANDLE threadHandle2 = CreateThread(
		0, // keine Security
		0, // default-Stack
		ThreadFunktion2,
		0, // kein Parameter
		0, // normal erzeugen
		&amp;threadId + 2 // threadId
		);

	HANDLE threadHandle3 = CreateThread(
		0, // keine Security
		0, // default-Stack
		ThreadFunktion3,
		0, // kein Parameter
		0, // normal erzeugen
		&amp;threadId + 3 // threadId
		);

	WaitForSingleObject(threadHandle0, INFINITE);
	WaitForSingleObject(threadHandle1, INFINITE);
	WaitForSingleObject(threadHandle2, INFINITE);
	WaitForSingleObject(threadHandle3, INFINITE);
	printf(&quot;\nEnd\n&quot;);
	getchar();

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1528348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528348</guid><dc:creator><![CDATA[Kuma]]></dc:creator><pubDate>Fri, 13 Jun 2008 12:00:40 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Fri, 13 Jun 2008 13:08:22 GMT]]></title><description><![CDATA[<p>Warum willst Du denn unbedingt so viel CPU-Kapzität verbraten. Schließlich braucht das Betriebssystem auch noch einige Reserven, um seine Aufgaben zu erledigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528396</guid><dc:creator><![CDATA[Elektronix]]></dc:creator><pubDate>Fri, 13 Jun 2008 13:08:22 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Fri, 13 Jun 2008 13:33:29 GMT]]></title><description><![CDATA[<p>Liegts vieleicht an der Priorität der Threads? Setz mal alle auf Realtime.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528415</guid><dc:creator><![CDATA[DaRpH]]></dc:creator><pubDate>Fri, 13 Jun 2008 13:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Fri, 13 Jun 2008 14:26:08 GMT]]></title><description><![CDATA[<p>DaRpH schrieb:</p>
<blockquote>
<p>Liegts vieleicht an der Priorität der Threads? Setz mal alle auf Realtime.</p>
</blockquote>
<p>Solange CPU-Power frei ist, müsste sie eigentlich genutzt werden.<br />
Ich tippe einfach mal, dass die Konsole irgendwie blockiert oder irgendwo mit auf-irgendwas-warten Zeit verbraucht wird (dann eben nicht CPU-Zeit). Denn wenn du nur Berechnungen durchführen lässt (ohne Ausgabe), sitzt sie Auslastung exakt auf 100%.</p>
<p>Btw ist das hier <code>&amp;threadId + 1</code> so ziemlich gar nicht gut! Du willst/sollst ja einen Zeiger auf eine Variable übergeben, die die Thread-ID empfängt. Mit dem &quot;+1&quot; übergibst du eine Speicherstelle, die nicht mehr mit der Variable &quot;threadId&quot; übereinstimmt, sondern darüber hinaus schreibt.</p>
<p>Und, abgesehen davon, kannst du auch mehrere Threads mit der selben Threadfunktion gleichzeitig starten, es sollten darin nur keine statischen Variablen verwendet werden. Die lokalen Variablen der Threadfunktion landen ja bei mehreren parallelen Threads alle auf einem anderen Stack-Bereich.</p>
<p>=&gt;</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;

DWORD WINAPI ThreadFunktion(LPVOID param)
{
	// Irgendeine sinnlose Berechnung:
	int x = 0;
	for(int b=0; b&lt;=1000000 ;b++)
		for(int a=0; a&lt;=1000000 ;a++){
			x *= a;
	    }
    return 0;
}

int main()
{
	static const int THREAD_COUNT = 4;
    DWORD threadIds[THREAD_COUNT];
	HANDLE threadHandles[THREAD_COUNT];

	for ( int i=0; i&lt;THREAD_COUNT; i++ )
		threadHandles[i] = CreateThread( 0, 0, ThreadFunktion, 0, 0, &amp;threadIds[THREAD_COUNT] );

	for ( int i=0; i&lt;THREAD_COUNT; i++ )
        WaitForSingleObject( threadHandles[i], INFINITE);

	printf(&quot;\nEnd\n&quot;);
    getchar();

	return 0;
}
</code></pre>
<p>Für C-Code eben die Konstante &quot;THREAD_COUNT&quot; mit #define deklarieren oder als enum-Wert benutzen; &quot;int i&quot; auch vor der Schleife deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528443</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 13 Jun 2008 14:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Fri, 13 Jun 2008 15:10:45 GMT]]></title><description><![CDATA[<p>Bei &quot;printf&quot; wird auch Zeit für die Synchronisation benötigt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528479</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 13 Jun 2008 15:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Fri, 13 Jun 2008 21:56:45 GMT]]></title><description><![CDATA[<p>danke für die zahlreichen antworten werde das morgen mal versuchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>aber ich glaube nicht das es an printf liegt, da dass in meinem anderen programm auch verwendet wird</p>
<p>und in dem oben genannten beispiel machen alle threads die gleiche berechnung -&gt; sie sollen aber verschiedene machen (arbeitsteilung)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528690</guid><dc:creator><![CDATA[Kuma]]></dc:creator><pubDate>Fri, 13 Jun 2008 21:56:45 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Sat, 14 Jun 2008 04:03:22 GMT]]></title><description><![CDATA[<p>Teste es nochmal mit irgendwas was kein printf macht.<br />
Und übergib gültige Zeiger für die Thread-ID, nicht den Mist den du jetzt machst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1528746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1528746</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 14 Jun 2008 04:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Sat, 14 Jun 2008 20:43:29 GMT]]></title><description><![CDATA[<p>Elektronix schrieb:</p>
<blockquote>
<p>Warum willst Du denn unbedingt so viel CPU-Kapzität verbraten. Schließlich braucht das Betriebssystem auch noch einige Reserven, um seine Aufgaben zu erledigen.</p>
</blockquote>
<p>So lange die Threads / der Prozess Rechenzeit abgibt, wenn andere Prozesse sie brauchen, ist das kein Problem. Ich meine du schleichst ja auch nicht mit deinem Auto mit 30 über die Autobahn, obwohl es 140 schafft. Also ich habe meine CPU zum Rechnen gekauft und nicht zum Schlafen. <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/1529249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529249</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 14 Jun 2008 20:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Sun, 15 Jun 2008 14:59:35 GMT]]></title><description><![CDATA[<p>@Luckie:<br />
Du fährst aber nicht mit deinem Auto stundenlang mit 140km/h im Kreis, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529541</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 15 Jun 2008 14:59:35 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Sun, 15 Jun 2008 20:43:25 GMT]]></title><description><![CDATA[<p>Ne, da fliegt er außer Kurve <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529745</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 15 Jun 2008 20:43:25 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Mon, 16 Jun 2008 06:03:08 GMT]]></title><description><![CDATA[<p>Kuma schrieb:</p>
<blockquote>
<p>aber ich glaube nicht das es an printf liegt, da dass in meinem anderen programm auch verwendet wird</p>
</blockquote>
<p>Na und! Was hat die Aussage, dass Du es woanders verwendest mit dem Problem hier zu tun.</p>
<p>Jochen hat recht.<br />
Es gibt in der CRT speziell eben auch bei der Ausgabe auf stdout eine Synchronisation, wenn Du das so machst. Dadurch warten mehr oder weniger eben ein Thread auf den anderen, weil eben nur ein Thread jeweils zu einer Zeit auf stdout schreiben kann.</p>
<p>Nimm mal die printf's raus und ersetze sie durch eine log oder sonst was rechenintensives und Du wirst Deine 100% Last bekommen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529870</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 16 Jun 2008 06:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Mon, 16 Jun 2008 22:40:30 GMT]]></title><description><![CDATA[<p>Na geh, Martin. Es reicht doch wenn wir anderen uns alle sicher sind dass es an printf liegt, ER muss das doch deswegen nicht glauben <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>
<blockquote>
<p>Nimm mal die printf's raus und ersetze sie durch eine log oder sonst was rechenintensives und Du wirst Deine 100% Last bekommen...</p>
</blockquote>
<p>Nicht wenn das &quot;log&quot; über printf implementiert ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>p.S.: Ich weiss seit heute z.B. auch dass ein ::CreateDirectory() in einer Endlosschleife auf einem Dual Core bloss einen Core voll auslastet. Hihi. Nicht dass ich es ausprobieren wollte... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
(Zumindest unter Win2003 auf nem VMware ESX Server)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1530469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1530469</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 16 Jun 2008 22:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Thu, 19 Jun 2008 11:03:22 GMT]]></title><description><![CDATA[<blockquote>
<p>p.S.: Ich weiss seit heute z.B. auch dass ein ::CreateDirectory() in einer Endlosschleife auf einem Dual Core bloss einen Core voll auslastet. Hihi. Nicht dass ich es ausprobieren wollte...</p>
</blockquote>
<p>Eigentlich blöd, einer könnte ja schonmal mit <em>Create</em> anfangen, während der andere noch das <em>Directory</em> sucht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1532146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532146</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Thu, 19 Jun 2008 11:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Thu, 19 Jun 2008 15:37:49 GMT]]></title><description><![CDATA[<p>Jo. Ich meinte natürlich wenn in 2 oder mehr Threads solche CreateDirectory Endlosschleifen laufen (auf einen Pfad wo die Berechtigungen fehlen, also es werden im Endeffekt garkeine Verzeichnisse angelegt). Und was mich dabei verwundert hat ist dass da eben trotzdem die Auslastung nicht auf 100% geht.</p>
<p>Eine Single-Core Maschine ist auf jeden Fall komplett &quot;dicht&quot; sobald da bloss ein solcher Thread läuft, da braucht es schonmal ein paar Minuten bis man bloss den Task-Manager offen hat.<br />
Auf einer Dual Core Maschine geht die CPU Last nicht höher als 50%, und man kann normal weiter arbeiten als ob garnix wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1532392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532392</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 19 Jun 2008 15:37:49 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Thu, 19 Jun 2008 15:46:05 GMT]]></title><description><![CDATA[<p>Achso!</p>
<p>Der Zugriff wird wahrscheinlich exklusiv durchgeführt (über CS/Mutex) gelockt, so daß sich sowieso immer nur ein thread damit beschäftigen darf.</p>
<p>Weiterhin sind die notwendigen Plattenzugriffe evtl. asynchron und erzeugen keine CPU - Last - nach ein paar iterationen solltest das aber alles in Cache liegen.</p>
<p>Das kann sich aber auch je nach Hardware und OS unterscheiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1532397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532397</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Thu, 19 Jun 2008 15:46:05 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Thu, 19 Jun 2008 18:08:39 GMT]]></title><description><![CDATA[<p>Jo irgendwo wird das serialisiert.<br />
Ist ja nicht so dass ich es mir nicht erklären könnte, hat nur irgendwie zum Thema gepasst, und da ich das kürzlich erst beobachten konnte ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1532489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532489</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 19 Jun 2008 18:08:39 GMT</pubDate></item><item><title><![CDATA[Reply to warum keine 100%tige CPU auslastung?? on Fri, 20 Jun 2008 07:55:39 GMT]]></title><description><![CDATA[<blockquote>
<p>hat nur irgendwie zum Thema gepasst, und da ich das kürzlich erst beobachten konnte</p>
</blockquote>
<p>Recht so! Hab' schön geschmunzelt <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/1532685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532685</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Fri, 20 Jun 2008 07:55:39 GMT</pubDate></item></channel></rss>