<?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[Prozessorauslastung bei mehreren Threads]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe nochmal eine Frage zu Threads. Ich habe neben meinem Hauptthread einen Workerthread erstellt. Als Priorität habe ich dem THREAD_PRIORITY_NORMAL gegeben. In diesem Worker werden innerhalb einer Schleife wiederholt Werte aus einer Messkarte ausgelesen. Die Oberfläche bleibt bedienbar, mittels einer Message kann ich diesen Ausleseprozess auch beenden.<br />
Jetzt habe ich im Taskmanager gesehen, dass nach Anlegen des 2. Threads die Prozessorauslastung auf 100% raufgeht. Kann man das irgendwie begrenzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184913/prozessorauslastung-bei-mehreren-threads</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 18:44:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184913.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Jun 2007 10:46:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 10:46:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe nochmal eine Frage zu Threads. Ich habe neben meinem Hauptthread einen Workerthread erstellt. Als Priorität habe ich dem THREAD_PRIORITY_NORMAL gegeben. In diesem Worker werden innerhalb einer Schleife wiederholt Werte aus einer Messkarte ausgelesen. Die Oberfläche bleibt bedienbar, mittels einer Message kann ich diesen Ausleseprozess auch beenden.<br />
Jetzt habe ich im Taskmanager gesehen, dass nach Anlegen des 2. Threads die Prozessorauslastung auf 100% raufgeht. Kann man das irgendwie begrenzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309772</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Wed, 20 Jun 2007 10:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 11:22:22 GMT]]></title><description><![CDATA[<p>Was willst Du denn? Soll der 2. Thread seine arbeit *ständig* machen oder nur *manchmal*?<br />
Wenn nur *manchmal*, dann kannst Du ja z.B. ein &quot;Sleep(1)&quot; einbauen... das wartet dann zwar ca. 12-15 ms, aber die Prozessorlast wird auf 0% gesenkt <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 />
Aber natürlich dauer Deine Berechnung (oder was Du da machst) *wesentlich* länger...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309795</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 20 Jun 2007 11:22:22 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 11:35:04 GMT]]></title><description><![CDATA[<p>Oder mache ein Sleep(0) und wenn der Restrechner frei ist bekommt der task wieder ein Zeitfenster</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309815</guid><dc:creator><![CDATA[user 0]]></dc:creator><pubDate>Wed, 20 Jun 2007 11:35:04 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 12:02:52 GMT]]></title><description><![CDATA[<p>user schrieb:</p>
<blockquote>
<p>Oder mache ein Sleep(0) und wenn der Restrechner frei ist bekommt der task wieder ein Zeitfenster</p>
</blockquote>
<p>Sleep(0) bringt bzgl. Prozessorlast überhaupt nix... die bleibt trotzdem bei 100%.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309849</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 20 Jun 2007 12:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 13:49:29 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Was willst Du denn? Soll der 2. Thread seine arbeit *ständig* machen oder nur *manchmal*?<br />
Wenn nur *manchmal*, dann kannst Du ja z.B. ein &quot;Sleep(1)&quot; einbauen... das wartet dann zwar ca. 12-15 ms, aber die Prozessorlast wird auf 0% gesenkt <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 />
Aber natürlich dauer Deine Berechnung (oder was Du da machst) *wesentlich* länger...</p>
</blockquote>
<p>Der Thread steuert einen Schrittmotor. Man schaltet einen Digitalausgang auf High, wartet eine Weile und schaltet dann wieder auf Low. Ist nicht so elegant gelöst, funktioniert aber. Blöd ist, dass die On-/Off-Zeiten in einem Bereich kleiner einer Millisekunde liegen. Womit sich das Sleep(1) schon mal erledigt hat. Die Delays werden mit Zählschleifen realisiert. Innerhalb dieser Schleifen wird eine Variable incrementiert, was natürlich etwas Zeit beansprucht und somit ein Delay kleiner 1 ms ermöglicht. Dieser Code ist nicht von mir, aber mir würde spontan auch nichts anderes einfallen.<br />
Aber bezogen auf ständig oder manchmal: Einmal angeschoben soll sich der Motor drehen. Es werden über diese Karte während dieser Routine noch drei Spannungswerte von Sensoren eingelesen und über eine Berechnung wird überprüft, ob das Abbruchkriterium erfüllt ist oder nicht. Wenn das der Fall ist soll der Thread verlassen werden.<br />
Könnte man das auch anders realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309944</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Wed, 20 Jun 2007 13:49:29 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 15:31:03 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>user schrieb:</p>
<blockquote>
<p>Oder mache ein Sleep(0) und wenn der Restrechner frei ist bekommt der task wieder ein Zeitfenster</p>
</blockquote>
<p>Sleep(0) bringt bzgl. Prozessorlast überhaupt nix... die bleibt trotzdem bei 100%.</p>
</blockquote>
<p>Hast du es schon versucht? Das ein Programm Last verursacht ist nichts schlimmes. Dazu sind Computer da. Sleep(0) gibt das Zeitfenster an Windows zurück. Sollten andere Prozesse auch mehr Zeit brauchen ist Sleep(0) genau das richtige.<br />
Und wenn die Auslastung dann bei 50 - 60% liegt passt das.<br />
Insbesondere bei Netzwerksachen und Schleifen ist dies der Fall.<br />
Warum sollte man ein Programm anhalten wenn es nicht notwendig ist.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6191">@AndyDD</a><br />
Du wirst ein Windows nie dazu veranlassen können etwas im Millisekundentakt zu machen. Windows ist kein EchtzeitBS.<br />
Selbst ein Timer alle 10 Millisekunden bringt nichts weil Windows das garnicht kann den Windows selbst arbeitet garnicht in diesem Takt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310027</guid><dc:creator><![CDATA[user 0]]></dc:creator><pubDate>Wed, 20 Jun 2007 15:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 16:54:41 GMT]]></title><description><![CDATA[<p>user schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>user schrieb:</p>
<blockquote>
<p>Oder mache ein Sleep(0) und wenn der Restrechner frei ist bekommt der task wieder ein Zeitfenster</p>
</blockquote>
<p>Sleep(0) bringt bzgl. Prozessorlast überhaupt nix... die bleibt trotzdem bei 100%.</p>
</blockquote>
<p>Hast du es schon versucht? Das ein Programm Last verursacht ist nichts schlimmes. Dazu sind Computer da. Sleep(0) gibt das Zeitfenster an Windows zurück. Sollten andere Prozesse auch mehr Zeit brauchen ist Sleep(0) genau das richtige.<br />
Und wenn die Auslastung dann bei 50 - 60% liegt passt das.<br />
Insbesondere bei Netzwerksachen und Schleifen ist dies der Fall.<br />
Warum sollte man ein Programm anhalten wenn es nicht notwendig ist.</p>
</blockquote>
<p>Sleep(0) ist böse und du hast nix verstanden.<br />
Sleep(0) gibt immer nur an Tasks mit <strong>gleicher oder höherer Priorität</strong> ab, und das ist ein wichtiger Unterschied zu Sleep(1).<br />
Und nein, sinnlos in einem Busy-Loop laufen ist auch NICHT das wozu Computer da sind, sondern es IST was schlimmes.<br />
BTW: vielleicht solltest du mal drüber nachdenken was Hyperthreading bzw. Dual Core bedeutet wenn du schon &quot;Auslastung bei 50-60%&quot; schreibst. Gelle. Mit einer Schleife die nur durch Sleep(0) gebremst wird und sonst nix hast du auf jeden Fall 100%, garantiert. Und ja, ich habe es ausprobiert.</p>
<p>EDIT: 100% Auslastung des <strong>Cores</strong> bzw. der <strong>logischen CPU</strong>. Wenn du 2 davon hast und nur einer ausgelastet ist zeigt der Task Manager natürlich 50% an... /EDIT</p>
<p>Schreib bitte keine solchen Postings wenn du vom Thema keine Ahnung hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310083</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 Jun 2007 16:54:41 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 17:06:55 GMT]]></title><description><![CDATA[<p>AndyDD schrieb:</p>
<blockquote>
<p>Man schaltet einen Digitalausgang auf High, wartet eine Weile und schaltet dann wieder auf Low. Ist nicht so elegant gelöst, funktioniert aber. Blöd ist, dass die On-/Off-Zeiten in einem Bereich kleiner einer Millisekunde liegen.</p>
</blockquote>
<p>Die *gewünschte* on/off Zeit oder die *max. erlaubte*?<br />
Wenn zweiteres, dann hast du sowieso ein Problem, denn das kannst du unter Windows nicht garantieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310113</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 Jun 2007 17:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 18:41:21 GMT]]></title><description><![CDATA[<p>user schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>user schrieb:</p>
<blockquote>
<p>Oder mache ein Sleep(0) und wenn der Restrechner frei ist bekommt der task wieder ein Zeitfenster</p>
</blockquote>
<p>Sleep(0) bringt bzgl. Prozessorlast überhaupt nix... die bleibt trotzdem bei 100%.</p>
</blockquote>
<p>Hast du es schon versucht? Das ein Programm Last verursacht ist nichts schlimmes. Dazu sind Computer da. Sleep(0) gibt das Zeitfenster an Windows zurück. Sollten andere Prozesse auch mehr Zeit brauchen ist Sleep(0) genau das richtige.<br />
Und wenn die Auslastung dann bei 50 - 60% liegt passt das.</p>
</blockquote>
<p>Hast Du es schon mal versucht?<br />
Die Last liegt aber bei 100% (mit einem Prozessor).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310167</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 20 Jun 2007 18:41:21 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 20 Jun 2007 19:21:38 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Sleep(0) ist böse und du hast nix verstanden.<br />
Sleep(0) gibt immer nur an Tasks mit <strong>gleicher oder höherer Priorität</strong> ab...</p>
</blockquote>
<p>du hast es auch nicht verstanden :p<br />
Sleep(0) gibt nur rechenzeit an threads mit <em>gleicher</em> prio ab. die höher priorisierten werden sowieso bevorzugt, ob mit oder ohne Sleep(0)...</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und nein, sinnlos in einem Busy-Loop laufen ist auch NICHT das wozu Computer da sind, sondern es IST was schlimmes.</p>
</blockquote>
<p>schlimm in bezug auf energieverbrauch, oder warum sonst noch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310183</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Wed, 20 Jun 2007 19:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Thu, 21 Jun 2007 04:52:09 GMT]]></title><description><![CDATA[<p>Auch ihr könnt nicht alles Wissen.<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39041.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39041.html</a></p>
<p>In dem Thread wurde auch nichts von Dualcore geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310319</guid><dc:creator><![CDATA[user 0]]></dc:creator><pubDate>Thu, 21 Jun 2007 04:52:09 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Fri, 22 Jun 2007 21:46:00 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Sleep(0) ist böse und du hast nix verstanden.<br />
Sleep(0) gibt immer nur an Tasks mit <strong>gleicher oder höherer Priorität</strong> ab...</p>
</blockquote>
<p>du hast es auch nicht verstanden :p<br />
Sleep(0) gibt nur rechenzeit an threads mit <em>gleicher</em> prio ab. die höher priorisierten werden sowieso bevorzugt, ob mit oder ohne Sleep(0)...</p>
</blockquote>
<p>Doch, verstanden schon, hab aber nicht daran gedacht beim schreiben <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>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und nein, sinnlos in einem Busy-Loop laufen ist auch NICHT das wozu Computer da sind, sondern es IST was schlimmes.</p>
</blockquote>
<p>schlimm in bezug auf energieverbrauch, oder warum sonst noch?[/quote]<br />
Ja, z.B. das. Ich mag es z.B. nicht wenn mein Lüfter hochdreht und ich anfange ihne zu hören. Auf Notebooks im Akkubetrieb auch ganz toll sowas <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/1311839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311839</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 22 Jun 2007 21:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Mon, 25 Jun 2007 08:34:42 GMT]]></title><description><![CDATA[<p>So, nun melde ich mich mal wieder zu Wort. Was zwei Tage Urlaub alles so ausmachen können.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>AndyDD schrieb:</p>
<blockquote>
<p>Man schaltet einen Digitalausgang auf High, wartet eine Weile und schaltet dann wieder auf Low. Ist nicht so elegant gelöst, funktioniert aber. Blöd ist, dass die On-/Off-Zeiten in einem Bereich kleiner einer Millisekunde liegen.</p>
</blockquote>
<p>Die *gewünschte* on/off Zeit oder die *max. erlaubte*?<br />
Wenn zweiteres, dann hast du sowieso ein Problem, denn das kannst du unter Windows nicht garantieren.</p>
</blockquote>
<p>Das weiß ich selbst. Generell arbeiten Timer im unteren Zeitbereich wesentlich unzuverlässiger. Ist für meine Anwednung aber egal. Der Motor soll einen Schritt machen, danach sind drei Messwerte zu erfassen, es folgt eine Berechnung und es wird ein Analogwert wieder ausgegeben. Sollten die Vorgaben erfüllt sein wird der Vorgang abgebrochen ansonsten wird wieder ein Schritt gemacht und das Spiel beginnt von vorn. Wenn zwischen den Schritte zeitlich kleine Abweichungen auftreten ist das nicht schlimm.<br />
Sleep(0) hatte ich schon probiert, bei Sleep(1) läuft der Motor zu langsam.<br />
Aber meine Frage war am Anfang: Kann man die Prozessorlast begrenzen, so dass z.B. die Anwendung maximal 80% den Prozessor auslastet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1313176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1313176</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Mon, 25 Jun 2007 08:34:42 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Mon, 25 Jun 2007 09:24:37 GMT]]></title><description><![CDATA[<p>Ja! Mein Laptop oder mein Desktop zieht bei solchen mies programmierten Programmen sofort die Lüfterdrehzahl hoch...</p>
<p>Warum? Nur weil 100% der prozessor Zeit für das pollen eines unisnnigen Status verschwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1313197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1313197</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 25 Jun 2007 09:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Tue, 26 Jun 2007 05:54:36 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Ja! Mein Laptop oder mein Desktop zieht bei solchen mies programmierten Programmen sofort die Lüfterdrehzahl hoch...</p>
<p>Warum? Nur weil 100% der prozessor Zeit für das pollen eines unisnnigen Status verschwendet werden.</p>
</blockquote>
<p>Ich weiß selbst das das nicht sauber ist. Aber hast Du eine andere Idee? Da hat sich ja schon mal jemand dran versucht und ich soll (oder muss) das jetzt fertig machen. Problem ist eben, dass ich den Ausgang eine bestimmte Zeit auf High-Level lassen muss, da sonst die Schrittmotorkarte den Impuls nicht erkennt bzw. die Messkarte den nicht sauber rausgibt.<br />
Außerdem läuft das Programm auf einem IPC. Der ist in einer Maschine eingebaut und läuft immer mit maximaler Lüfterdrehzahl....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1313743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1313743</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Tue, 26 Jun 2007 05:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Tue, 26 Jun 2007 17:32:29 GMT]]></title><description><![CDATA[<p>Du kannst timeBeginPeriod(1) + Sleep(1) versuchen.<br />
Wenn das zu langsam ist mach es mit Sleep(0).<br />
Wenn das immer noch zu langsam ist mach es ganz ohne Sleep().</p>
<p>Ich will niemandem verbieten Sleep(0) oder gar Loops ohne jegliche Pause zu verwenden. Ich finde es nur nicht richtig dass immer wieder kompletter Unfug über Sleep(0) gepostet wird. Und ich finde die Einstellung &quot;is doch wurscht wenn ich sinnlos Rechenzeit verbrate&quot; die von manchen vertreten wird zum kotzen.</p>
<p>Wenn es allerdings einen guten Grund gibt einen Sleep(0) Loop zu verwenden, und nochdazu kein anderes Programm gestört wird, dann habe ich sicher nix dagegen und werde auch nicht versuchen es jmd. auszureden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314206</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 26 Jun 2007 17:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Tue, 26 Jun 2007 22:10:27 GMT]]></title><description><![CDATA[<p>Sleep(0) ist keine Lösung für Profis. Aber auch ich habe schon bei Netzwerksoftware welche Dateien empfangen Sleep(0) eingebaut und die Last ist von 100% auf 5% gesunken.<br />
Es kommt da auch immer auf die Art Software an.<br />
Einen Schrittmotor mit 1ms anzusteuern geht unter Windows eh nicht. Da braucht es andere BS. Ich habe es mir nicht genau gemerkt aber RenéG hat damals was von ca. 18ms geschrieben was das minimum ist wo Windows zumindest vielleicht einen Auslösen könnte. Windows ich eben kein Echtzeit-BS.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314405</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Tue, 26 Jun 2007 22:10:27 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 27 Jun 2007 00:03:28 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/156">@Unix-Tom</a>:</p>
<p>Also mit &quot;timeBeginPeriod(1);&quot; bekomme ich auf meinem Windows XP PRO SP2 eine Auflösung von ~2ms für Sleep() (1000 Durchläufe von Sleep(1) dauern ~195ms). Ohne &quot;timeBeginPeriod(1);&quot; dauert 1x Sleep(1) etwa 16ms.</p>
<p>Einen Schrittmotor mit ~1ms Delay anzusteuern geht unter Windows auch ganz gut, solange es eben keine max. Zeit gibt die nicht überschritten werden darf. Die min. Zeit kann man eigentlich ganz gut mit QueryPerformanceCounter garantieren.</p>
<p>Dass man damit das System herprügelt ist klar, aber wenn das Kastl sonst nix tut sollte es egal sein.</p>
<p>Dass die bessere Lösung wahrscheinlich ein kleiner Microkontroller wäre den man z.B. an die serielle Schnittstelle oder per USB anhängen kann (irgendwas ala BASIC Briefmarke) ist auch klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314427</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 27 Jun 2007 00:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 27 Jun 2007 06:12:54 GMT]]></title><description><![CDATA[<p>Unix-Tom schrieb:</p>
<blockquote>
<p>Sleep(0) ist keine Lösung für Profis. Aber auch ich habe schon bei Netzwerksoftware welche Dateien empfangen Sleep(0) eingebaut und die Last ist von 100% auf 5% gesunken.</p>
</blockquote>
<p>Sleep(0) macht rein gar nichts (es legt Dein Thread nur in der Queue von ganz vorne nach ganz hinten; wenn Du aber der einzige in der Queue bist, kommst Du sofort wieder dran)! Die &quot;Last&quot; bleibt bei 100%!<br />
Du meinstest wohl ein &quot;Sleep(1)&quot;...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314469</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 27 Jun 2007 06:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 27 Jun 2007 06:27:36 GMT]]></title><description><![CDATA[<p>Guten Morgen. Das ist sicher alles richtig was ihr da sagt, beantwortet aber meine Fragestellung nicht. Sicher sollte man einen µC oder eine SPS zur Steuerung verwenden. Aber ihr wisst ja wie das ist wenn man ein Projekt übernimmt: gewisse Teile muss man aus irgendwelchen Gründen übernehmen und hat dann ein Haufen Ärger damit. Außerdem haben diese IPCs keine USB-Schnittstelle und die zwei seriellen Ports sind schon mit anderen Geräten belegt. Ich habe nie behauptet das ich irgendwelche Zeiten garantieren will oder muss und mir ist auch klar, dass Zeiten unter 20 ms kritisch sind bzw. auch darüber nie garantiert werden können da Windows kein Echtzeit-BS ist.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: Wie soll ich denn QueryPerformanceCounter verwenden? Wenn ich das richtig verstanden habe gibt der doch die Anzahl der Ticks wieder, die seit dem Systemstart vergangen sind. Kann man das als Ersatz für die Zählschleifen verwenden? Ich hab irgendwo gelesen das da Auflösungen bis 1 µs möglich sind, da die Taktfrequenz dieses Hardwarecounters irgendwo bei 3,19 MHz liegen soll. Wenn dem so ist dann wäre zumindest das Programm unabhängig vom Prozessortakt. Bei den Zählschleifen ist das Verhalten ja rechnerabhängig, bei höheren Prozessorfrequenzen muss man ja die variable für die Abbruchbedingung erhöhen. Bleibt immer noch das Problem mit der Begrenzung der Prozessorauslastung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314476</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Wed, 27 Jun 2007 06:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 27 Jun 2007 07:33:48 GMT]]></title><description><![CDATA[<p>AndyDD schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: Wie soll ich denn QueryPerformanceCounter verwenden? Wenn ich das richtig verstanden habe gibt der doch die Anzahl der Ticks wieder, die seit dem Systemstart vergangen sind.</p>
</blockquote>
<p>Das einfachste ist Du fragst vorher mittels QueryPerformanceFreuqency wie viele Ticks eine Sekunde sind <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/1314515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314515</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 27 Jun 2007 07:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 27 Jun 2007 07:58:09 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>AndyDD schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>: Wie soll ich denn QueryPerformanceCounter verwenden? Wenn ich das richtig verstanden habe gibt der doch die Anzahl der Ticks wieder, die seit dem Systemstart vergangen sind.</p>
</blockquote>
<p>Das einfachste ist Du fragst vorher mittels QueryPerformanceFreuqency wie viele Ticks eine Sekunde sind <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>Also so hier:</p>
<pre><code class="language-cpp">LONGLONG Frequency, CurrentTime, LastTime;
	double TimeElapsed, TimeScale;
	bool CounterAvailable = false;
	if (QueryPerformanceFrequency((LARGE_INTEGER*)&amp;Frequency))
	{
		CounterAvailable = true;
		TimeScale = 1.0/Frequency;
		QueryPerformanceCounter((LARGE_INTEGER*) &amp;LastTime);

	}
	else
	{
		LastTime = timeGetTime();
		TimeScale = 0.001;
	}

	if (CounterAvailable)
	{
		QueryPerformanceCounter((LARGE_INTEGER*) &amp;CurrentTime);
	}
	else
		CurrentTime = timeGetTime();
	TimeElapsed = (CurrentTime-LastTime)*TimeScale;
	LastTime=CurrentTime;
</code></pre>
<p>Und damit schafft man Auflösungen kleiner 1 ms? Dann könnte man ja in einer do-while-Schleife QueryPerformanceCounter und die Differenz zum ersten Wert bilden, bis eine gewisse Anzahl von Ticks erreicht worden ist. Oder man rechnet alternativ mit Zeiten. Sehe ich das so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314528</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Wed, 27 Jun 2007 07:58:09 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Wed, 27 Jun 2007 08:40:18 GMT]]></title><description><![CDATA[<p>AndyDD schrieb:</p>
<blockquote>
<p>Und damit schafft man Auflösungen kleiner 1 ms? Dann könnte man ja in einer do-while-Schleife QueryPerformanceCounter und die Differenz zum ersten Wert bilden, bis eine gewisse Anzahl von Ticks erreicht worden ist. Oder man rechnet alternativ mit Zeiten. Sehe ich das so richtig?</p>
</blockquote>
<p>Genau! Ist das nicht Toll!?<br />
Der Nachteil ist: Dein Rechner ist halt zu 100% ausgelastet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314553</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:40:18 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Fri, 29 Jun 2007 03:20:57 GMT]]></title><description><![CDATA[<p>Genau. Allerdings solltest du bei QueryPerformanceCounter aufpassen. Wir hatten unlängst erst einen Thread wo jmd. geschrieben hat dass die Werte bei ihm z.T. &quot;zurückgesprungen&quot; sind, die gemessene Zeit sozusagen negativ war. Anscheinend kann das bei AMD Systemen unter gewissen Umständen passieren.<br />
Und ich selbst habe erlebt dass sogar auf Intel Systemen die Werte z.T. etwas &quot;springen&quot; (wenn auch nie zurück).</p>
<p>Du solltest also wenn du QueryPerformanceCounter verwendest entweder zusehen dass das Programm auf &quot;kontrollierter&quot; Hardware läuft (=nur mit Komponenten von denen bekannt ist dass sie keine Probleme machen), und vielleicht auch nicht ganz an die Grenzen des Schrittmotors gehen, sondern ein paar Prozent Spielraum lassen.</p>
<p>Weiters hab' ich in einigen Codes gesehen dass timeGetTime und QueryPerformanceCounter parallel verwendet werden. Dabei wird timeGetTime z.B. verwendet um zu checken ob das was QueryPerformanceCounter zurükliefert stimmen kann, um Probleme zu vermeiden wenn QueryPerformanceCounter von einem Moment auf den anderen einen Riesen &quot;Sprung in der Zeit&quot; meldet (=viel mehr als die wirklich vergangene Zeit).</p>
<p>So sollte sich trotz der &quot;unzulänglichkeiten&quot; von QueryPerformanceCounter eine Clock basteln lassen die gut geringe Zeitspannen abdecken kann aber trotzdem nie &quot;wild in der Gegend rumspringt&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314609</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 29 Jun 2007 03:20:57 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Fri, 29 Jun 2007 06:02:51 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>AndyDD schrieb:</p>
<blockquote>
<p>Und damit schafft man Auflösungen kleiner 1 ms? Dann könnte man ja in einer do-while-Schleife QueryPerformanceCounter und die Differenz zum ersten Wert bilden, bis eine gewisse Anzahl von Ticks erreicht worden ist. Oder man rechnet alternativ mit Zeiten. Sehe ich das so richtig?</p>
</blockquote>
<p>Genau! Ist das nicht Toll!?<br />
Der Nachteil ist: Dein Rechner ist halt zu 100% ausgelastet...</p>
</blockquote>
<p>Ja das war er ja vorher mit der Zählschleife auch. Bleibt jetzt nur noch die Frage nach der Begrenzung. Aber anscheinend gehts nicht...</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Du solltest also wenn du QueryPerformanceCounter verwendest entweder zusehen dass das Programm auf &quot;kontrollierter&quot; Hardware läuft (=nur mit Komponenten von denen bekannt ist dass sie keine Probleme machen), und vielleicht auch nicht ganz an die Grenzen des Schrittmotors gehen, sondern ein paar Prozent Spielraum lassen.</p>
</blockquote>
<p>Was verstehst Du denn unter kontrollierter Hardware? Ich hab in der Kiste ein Intelsystem mit einem Celeron, der dürfte ja nach Deinen Aussagen das alles mitmachen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314628</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Fri, 29 Jun 2007 06:02:51 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorauslastung bei mehreren Threads on Fri, 29 Jun 2007 21:07:38 GMT]]></title><description><![CDATA[<p>Ich meine damit dass dann z.B. nicht nächstes Jahr auf einmal ein AMD verwendet wird weils billiger ist, oder grad nix anderes verfügbar war.</p>
<p>Kontrolliert im Sinne von &quot;nicht einfach irgendwas&quot;.</p>
<p>Unterstützt wird QueryPerformanceCounter sowieso auf allen aktuellen Systeme, bloss die Genauigkeit ist eben sehr untershiedlich, vor allem auf Systemen die die Taktfrequenz dynamisch regeln und mehrere Cores/CPUs haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315322</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 29 Jun 2007 21:07:38 GMT</pubDate></item></channel></rss>