<?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[Variable im Register verändern]]></title><description><![CDATA[<p>Hallo,</p>
<p>es gibt ja Funktionen die Variablen runden.</p>
<pre><code class="language-cpp">var = floorf(var*100 + .5)/100.;
</code></pre>
<p>Leider hat die Variable dann aber im Register immer noch irgendwelche Nachkommastellen die einen Wert haben. Kann ich irgendwie die Variable im Register auf z.B. zwei Nachkommastellen kürzen?</p>
<p>Gruß Laura</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256271/variable-im-register-verändern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 04:39:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256271.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Dec 2009 13:34:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 13:34:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>es gibt ja Funktionen die Variablen runden.</p>
<pre><code class="language-cpp">var = floorf(var*100 + .5)/100.;
</code></pre>
<p>Leider hat die Variable dann aber im Register immer noch irgendwelche Nachkommastellen die einen Wert haben. Kann ich irgendwie die Variable im Register auf z.B. zwei Nachkommastellen kürzen?</p>
<p>Gruß Laura</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820586</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Thu, 10 Dec 2009 13:34:55 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 13:42:48 GMT]]></title><description><![CDATA[<p>Das geht sicherlich nicht, allein schon weil der Umgang mit Fließkommazahlen stark architekturabhängig ist. Wozu genau benötigst du das? Da gibt es bestimmt ne andere Lösung für.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820592</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Thu, 10 Dec 2009 13:42:48 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 13:55:29 GMT]]></title><description><![CDATA[<p>Computer kennen keine &quot;Stellen&quot;. Sie kennen nur den Wert von Zahlen. Was meinst du denn überhaupt damit, dass der Wert im Register noch Nachkommastellen hätte? Dass du 1.00000001 anstatt 1.00 hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820607</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 10 Dec 2009 13:55:29 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:04:11 GMT]]></title><description><![CDATA[<p>Also ich hab nen Joystick und der hat drei Achsen die leider nie genau den Wert 0.00000000000 annehmen. Ich möchte aber eine Schleife programmieren in die nur dann reingesprungen wird wenn der Wert von Null abweicht, also wenn der Joystick bewegt wird. Wenn jetzt aber der Wert im Register nie Null wird, wird immer in die Schleife gesprungen und das muss ich irgendwie verhindern.</p>
<p>Achso ja und mit Nachkommastellen meine ich dass der Wert eben nicht &quot;0.00000000&quot; ist sondern halt zum Beispiel &quot;-0.00782788&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820620</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:13:33 GMT]]></title><description><![CDATA[<p>laura84 schrieb:</p>
<blockquote>
<p>Also ich hab nen Joystick und der hat drei Achsen die leider nie genau den Wert 0.00000000000 annehmen. Ich möchte aber eine Schleife programmieren in die nur dann reingesprungen wird wenn der Wert von Null abweicht, also wenn der Joystick bewegt wird. Wenn jetzt aber der Wert im Register nie Null wird, wird immer in die Schleife gesprungen und das muss ich irgendwie verhindern.</p>
</blockquote>
<p>Fließkommazahlen mit einem Wert auf Gleichheit zu prüfen ist nie eine gute Idee. Für diesen Fall prüfst du einfach, ob der Absolutbetrag des Wertes größer als ein bestimmter Schwellwert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820625</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:13:33 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:18:03 GMT]]></title><description><![CDATA[<p>Ja das habe ich auch schon überlegt, aber dann hatte ich es wieder verworfen, da ich dachte dass es mit dem Runden klappt. Ich habs jetzt mal so probiert:</p>
<pre><code class="language-cpp">if (0.05 &lt; var || var &lt; -0.05)
</code></pre>
<p>Allerdings habe ich jetzt das Problem dass beim ersten mal Auslesen der Joystick Achsen immer ein Zufalls-Wert ausgelesen wird und der nicht mal annähernd 0 ist. Also wird immer beim ersten mal die Schleife aufgerufen und da in der Schleife nicht nochmal neu abgefragt wird springt er nie mehr raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820643</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:18:03 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:23:43 GMT]]></title><description><![CDATA[<p>laura84 schrieb:</p>
<blockquote>
<p>Ja das habe ich auch schon überlegt, aber dann hatte ich es wieder verworfen, da ich dachte dass es mit dem Runden klappt. Ich habs jetzt mal so probiert:</p>
<pre><code class="language-cpp">if (0.05 &lt; var || var &lt; -0.05)
</code></pre>
<p>Allerdings habe ich jetzt das Problem dass beim ersten mal Auslesen der Joystick Achsen immer ein Zufalls-Wert ausgelesen wird und der nicht mal annähernd 0 ist. Also wird immer beim ersten mal die Schleife aufgerufen und da in der Schleife nicht nochmal neu abgefragt wird springt er nie mehr raus.</p>
</blockquote>
<p>Das Problem hättest du doch auch mit Runden oder? So ganz verstehe ich das nicht. Wie kommst du denn sonst aus der Schleife? Hilft es, wenn du den Wert vor der Abfrage nochmal ausliest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820651</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:23:43 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:40:11 GMT]]></title><description><![CDATA[<p>Redest du hier von CPU-Registern? So ganz klar wird mir dass hier nämlich nicht.</p>
<p>Gleitkommazahlen setzen sich zusammen aus Vorzeichen, Mantisse, Basis und Exponent.</p>
<p>Siehe: <a href="http://754r.ucbtest.org/standards/754.pdf" rel="nofollow">IEEE 754</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820666</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:47:31 GMT]]></title><description><![CDATA[<p>Ich hab das jetzt schon hinbekommen. Jetzt scheiterts wieder an was Anderem. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Zu der Schleifenbedingung habe ich auch noch was hinzugefügt.</p>
<p>FrEEzE2046 schrieb:</p>
<blockquote>
<p>Redest du hier von CPU-Registern?</p>
</blockquote>
<p>Naja ich rede halt von den Registern in die VC++ seine Variablen abspeichert, ich denke das sind CPU Register.?. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820675</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:47:31 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:50:40 GMT]]></title><description><![CDATA[<p>laura84 schrieb:</p>
<blockquote>
<p>Ich hab das jetzt schon hinbekommen. Jetzt scheiterts wieder an was Anderem. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Zu der Schleifenbedingung habe ich auch noch was hinzugefügt.</p>
</blockquote>
<p>Poste doch mal deinen Code. Dann kann man da sicherlich mehr zu sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820677</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:50:40 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:54:02 GMT]]></title><description><![CDATA[<p>laura84 schrieb:</p>
<blockquote>
<p>Naja ich rede halt von den Registern in die VC++ seine Variablen abspeichert, ich denke das sind CPU Register.?. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Hört sich so an als wäre da noch einiges Ungewiss bei dir. Ich kommentier den Satz jetzt mal nicht weiter und frag lieber:</p>
<p>Was ist die Aufgabe die du dir gesetzt hast? Was genau willst du erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820681</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:54:02 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 14:59:07 GMT]]></title><description><![CDATA[<p>Ist aber ziemlich verwirrend, außerdem muss ich dann erstmal mein eigentliches Vorhaben schildern:<br />
Also wenn man den Joystick nach rechts/links/oben/unten bewegt <strong>würde</strong> ein damit gesteuertes Flugzeug ja einfach sofort in diese Richtung kippen. Ich möchte aber dass eine Verzögerung eingebaut wird. Und zwar soll das imaginäre Flugzeug sich bei Vollausschlag um 5 Grad in der Sekunde neigen.<br />
Ich hoffe das ist verständlich. Und achja, ich möchte <strong>keinen</strong> Flugsimulator programmieren. <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="😃"
    /><br />
Außerdem sollte ich vielleicht noch dazu sagen dass ich die &quot;plib&quot; nutze, für die Joystick Anbindung.</p>
<p>Hier mein Code:</p>
<pre><code class="language-cpp">#define WIN32_LEAN_AND_MEAN

#include &lt;js.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#include &lt;windowsx.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;

using namespace std;

CRITICAL_SECTION csQueueInAccess;

jsJoystick *js;
float      *ax;

int count  = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;

float aend[3];

DWORD WINAPI ThreadFunc(LPVOID data)
{
	EnterCriticalSection(&amp;csQueueInAccess);

	for (int j = 0; j &lt; 3; j++)
	{
		ax[j] = floorf(ax[j]*100 + .5)/100.;
		aend[j] = ax[j] * 5;

		while (0.05 &lt; ax[j] || ax[j] &lt; -0.05)
		{
			count4 = count3 + 1;
			Sleep(1000);

			while (count4&gt;count3 &amp;&amp; (0.05 &lt; ax[j] || ax[j] &lt; -0.05))
			{
				aend[j] += aend[j];
			}
		}

		printf (&quot;                        &quot;);
		printf (&quot;%+.1f &quot;, aend[j]);
	}

	return((DWORD)data);

	LeaveCriticalSection(&amp;csQueueInAccess);

}

int main ( int, char ** )
{
 	HANDLE hThread;
	DWORD  dwThreadID;
	int index;

	InitializeCriticalSection(&amp;csQueueInAccess);

	jsInit ();

	js = new jsJoystick (0);

	if (js-&gt;notWorking ())
		printf (&quot;Joystick not detected\n&quot;);
	else
		printf (&quot;Joystick is \&quot;%s\&quot;\n\n&quot;, js-&gt;getName());

	if (js-&gt;notWorking ()) 
		exit (1);

	ax = new float [js-&gt;getNumAxes ()];

	int j;

	count2 = count + 1;
	Sleep (30);
	while (count2&gt;count)
	{
		printf (&quot;Joystick test program.\n&quot;);
		printf (&quot;~~~~~~~~~~~~~~~~~~~~~~\n\n&quot;);

		printf (&quot;+---------JS----------&quot;);

		printf (&quot;+----------------+\n&quot;);

		printf (&quot;| Btns &quot;);

		for (j = 0 ; j &lt; 3 ; j++)
			printf (&quot;Ax:%d &quot;, j);

		for ( ; j &lt; 3 ; j++ )
			printf (&quot;     &quot;);

		printf (&quot;|&quot;);

		printf (&quot;   Aenderung    |\n&quot;);

		printf (&quot;+---------------------&quot;);

		printf (&quot;+----------------+\n&quot;);

		int b;

		js-&gt;read (&amp;b, ax);

		printf (&quot;| %04x &quot;, b);

		for (j = 0 ; j &lt; 3 ; j++)
		{
			ax[j] = floorf(ax[j]*100 + .5)/100.;
			printf (&quot;%+.1f &quot;, ax[j]);
		}

		printf(&quot;| &quot;);

		for (int i = 0; i &lt; 3; i++)
		{
			if (0.05 &lt; ax[i] || ax[i] &lt; -0.05)
			{
				hThread = CreateThread(NULL,				
									   0,				
									   ThreadFunc,		
									   (LPVOID)index,	
									   0,				
									   &amp;dwThreadID);

				WaitForSingleObject(hThread, 15);
				CloseHandle(hThread);
			}
		}

		system(&quot;cls&quot;);
	}

	DeleteCriticalSection(&amp;csQueueInAccess);

	getchar();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1820687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820687</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Thu, 10 Dec 2009 14:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 15:04:54 GMT]]></title><description><![CDATA[<p>Hmm erschließt sich mit tatsächlich nicht auf Anhieb <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> . Wozu brauchst du die Threads? Wenn ich das richtig sehe erzeugst du immer einen Thread und wartest dann darauf, das der fertig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820690</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Thu, 10 Dec 2009 15:04:54 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 15:08:53 GMT]]></title><description><![CDATA[<p>Was meinst du mit Verzögerung? Soll sich das Flugzeug zeitlich später neigen? soll die Neigung begrenzt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820695</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Thu, 10 Dec 2009 15:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 15:11:41 GMT]]></title><description><![CDATA[<p>siecpp schrieb:</p>
<blockquote>
<p>Wenn ich das richtig sehe erzeugst du immer einen Thread und wartest dann darauf, das der fertig ist.</p>
</blockquote>
<p>Siehst du richtig. Macht überhaupt keinen Sinn <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>Mit Verzögerung meint er wohl, dass das Flugzeug nicht sofort &quot;volles rohr&quot; nach oben/unten ziehen soll, sondern der Grad des Steigens zunimmt ... oder so ähnlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820698</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Thu, 10 Dec 2009 15:11:41 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Thu, 10 Dec 2009 15:14:59 GMT]]></title><description><![CDATA[<p>FrEEzE2046 schrieb:</p>
<blockquote>
<p>Mit Verzögerung meint er wohl, dass das Flugzeug nicht sofort &quot;volles rohr&quot; nach oben/unten ziehen soll, sondern der Grad des Steigens zunimmt ... oder so ähnlich.</p>
</blockquote>
<p>Das würde ja heißen den Joystickausschlag uber die Zeit zu integrieren (bzw zu addieren, da das ja diskret ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820706</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Thu, 10 Dec 2009 15:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 09:26:37 GMT]]></title><description><![CDATA[<p>Also die Threads brauche ich, da ich eine Art Timer bauen musste um diese Verzögerung zu gestalten. Die Versögerung meinte ich so, dass wenn der Joystick ganz nach rechts gedrückt wird, bekomme ich ja den Wert +1.0 zurückgegeben. Das Flugzeug soll aber nicht sofort zur Seite kippen sondern immer nur 5 Grad pro Sekunde nach rechts geneigt werden. Wenn ich nur halb nach rechts drücke soll auch nur 2.5 Grad pro Sekunde geneigt werden.<br />
Ich wollte das so machen, dass ich den Rückgabe Wert des Joysticks mal 5 rechne und dann pro Sekunde diesen Wert immer einmal aufaddiere. Leider funktioniert das eben nicht. Außerdem sollte das ja aufhören wenn der Joystick in eine andere Richtung gedrückt wird, bzw. einfach losgelassen wird.<br />
Warum sollte das mit den Threads keinen Sinn machen? Ich bin irgendwann auf die Schlussfolgerung gekommen dass es ohne Threads nicht machbar ist. Man muss aber auch dazu sagen dass das mein erstes Programm in Richtung Multithreading ist und ich deswegen einiges falsch gemacht haben könnte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821094</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Fri, 11 Dec 2009 09:26:37 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 09:44:30 GMT]]></title><description><![CDATA[<p>laura84 schrieb:</p>
<blockquote>
<p>Also die Threads brauche ich, da ich eine Art Timer bauen musste um diese Verzögerung zu gestalten. Die Versögerung meinte ich so, dass wenn der Joystick ganz nach rechts gedrückt wird, bekomme ich ja den Wert +1.0 zurückgegeben. Das Flugzeug soll aber nicht sofort zur Seite kippen sondern immer nur 5 Grad pro Sekunde nach rechts geneigt werden. Wenn ich nur halb nach rechts drücke soll auch nur 2.5 Grad pro Sekunde geneigt werden.<br />
Ich wollte das so machen, dass ich den Rückgabe Wert des Joysticks mal 5 rechne und dann pro Sekunde diesen Wert immer einmal aufaddiere.</p>
</blockquote>
<p>OK ich denke fals ich dich richtig verstehe ist es das, was ich mit integrieren gemeint habe.</p>
<p>laura84 schrieb:</p>
<blockquote>
<p>Leider funktioniert das eben nicht. Außerdem sollte das ja aufhören wenn der Joystick in eine andere Richtung gedrückt wird, bzw. einfach losgelassen wird..</p>
</blockquote>
<p>Das müsste doch implizit funktionieren. Wenn der Joystick Null liefert wird die Neigung beibehalten, wenn der Wert negativ ist wird die Neigung verringert. Ich denke das Problem ist, das du einfach losprogrammiert hast ohne genau zu wissen was du tun willst. Das geht meistens in die Hose. Du solltest dir erstmal überlegen wie die Lösung konzeptionell funktionieren soll.</p>
<p>laura84 schrieb:</p>
<blockquote>
<p>Warum sollte das mit den Threads keinen Sinn machen?</p>
</blockquote>
<p>Threads machen <strong>bei deiner Lösung</strong> keinen Sinn. Threads sind dazu da, Dinge parallel zu machen. So wie du das gemacht hast, läuft aber immer nur ein Thread. Was soll das bringen?</p>
<p>laura84 schrieb:</p>
<blockquote>
<p>Ich bin irgendwann auf die Schlussfolgerung gekommen dass es ohne Threads nicht machbar ist.</p>
</blockquote>
<p>Ich denke Threads könnten durchaus nützlich sein bei dem was du machen möchtest aber nicht bei dem was du machst <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>laura84 schrieb:</p>
<blockquote>
<p>Man muss aber auch dazu sagen dass das mein erstes Programm in Richtung Multithreading ist und ich deswegen einiges falsch gemacht haben könnte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Der Punkt ist, dass deim Programm kein <strong>Multi</strong>threading macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821099</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Fri, 11 Dec 2009 09:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 10:00:11 GMT]]></title><description><![CDATA[<p>siecpp schrieb:</p>
<blockquote>
<p>Threads machen <strong>bei deiner Lösung</strong> keinen Sinn. Threads sind dazu da, Dinge parallel zu machen. So wie du das gemacht hast, läuft aber immer nur ein Thread. Was soll das bringen?<br />
Ich denke Threads könnten durchaus nützlich sein bei dem was du machen möchtest aber nicht bei dem was du machst <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 />
Der Punkt ist, dass deim Programm kein <strong>Multi</strong>threading macht.</p>
</blockquote>
<p>Okay, jetzt wohl nicht mehr, da hast du recht. Ich hatte vorher in der main die Abfrage der Werte in einer endlos-while-Schleife und wollte gleichzeitig einen Wert ändern der in dieser Schleife genutzt wurde, deshalb hatte ich mich fürs (damals war es noch ein) Multithreading entschieden. Gestern habe ich dann die Endlosschleife abgeändert in eine zeitlich begrenzte Abfrage, seitdem ist mein Programm wohl kein Multithreading Programm mehr. <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>Mittlerweile klappt alles, also auch die Verzögerung habe ich gerade hinbekommen. Ich programmiere meistens einfach so drauf los, obwohl mir hier schon vorher bewusst war was ich erreichen möchte. Trotzdem bin ich wohl eher der Try-and-Error Typ. Ich programmiere aber auch noch nicht sehr lange.</p>
<p>Das einzige Problem dass ich jetzt noch habe ist die Ausgabe. Die will einfach nicht klappen. Momentan möchte ich die Werte ja einfach nur mal angezeigt bekommen, aber durch diese ständigen Abfragen musste ich ja ein</p>
<pre><code class="language-cpp">system (&quot;cls&quot;);
</code></pre>
<p>einbauen, sonst könnte man ja gar nichts mehr sehen. Allerdings gibt er mir jetzt nicht die veränderten Werte aus. Weißt du wpran das liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821107</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Fri, 11 Dec 2009 10:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 11:30:37 GMT]]></title><description><![CDATA[<p>laura84 schrieb:</p>
<blockquote>
<p>Allerdings gibt er mir jetzt nicht die veränderten Werte aus. Weißt du wpran das liegen könnte?</p>
</blockquote>
<p>meinst du diese stelle im code?</p>
<pre><code class="language-cpp">printf (&quot;                        &quot;);
        printf (&quot;%+.1f &quot;, aend[j]);
</code></pre>
<p>Wird da garnichts ausgegeben oder nur nicht das, was du möchtest? Was sagt der Debugger? Wesshalb benutzt du printf und nicht cout?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821141</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Fri, 11 Dec 2009 11:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 11:58:12 GMT]]></title><description><![CDATA[<p>Ja genau die Stelle meinte ich, allerdings hab ich die erste Zeile jetzt weg gelassen, weil sie mittlerweile überflüssig ist. Außerdem hab ich herausgefunden dass es mir kurz ausgegeben wird, aber dann durch den &quot;cls&quot; Befehl gleich wieder gelöscht wird.</p>
<p>siecpp schrieb:</p>
<blockquote>
<p>Wesshalb benutzt du printf und nicht cout?</p>
</blockquote>
<p>Naja um ehrlich zu sein weil ich nicht wüsste wie ich sonst diese Zeilen ausgeben könnte:</p>
<pre><code class="language-cpp">printf (&quot;Joystick is \&quot;%s\&quot;\n\n&quot;, js-&gt;getName());
</code></pre>
<pre><code class="language-cpp">printf (&quot;%+.1f &quot;, ax[j]);
</code></pre>
<p>Also das Begrenzen der float Variablen geht wohl irgendwie mit</p>
<pre><code class="language-cpp">setprecision
</code></pre>
<p>aber das geht bei mir irgendwie nicht, da gibt er dann mal keine Nachkommastelle an oder auch mal zwei, wie er gerade will. Deshalb nutze ich printf.</p>
<p>Mittlerweile ist mir noch aufgefallen, dass die Verzögerung jetzt wohl klappt, aber nur beim ersten mal Joystick bewegen und wenn ich dann wieder auf Null gehe ruft er mir nie wieder den Thread auf, egal wie ich den Joystick bewege. Außerdem wird immer nur eine Achse beachtet, wenn ich gleichzeitig nach oben und nach rechts drücke nimmt er nur die Achse die zuerst btätigt wurde.</p>
<p>Ich poste jetzt nochmal meinen Code, weil ich den jetzt nochmal abgeändert hab, vielleicht kannst du mir ja doch noch irgendwie helfen auch wenns total unübersichtlich ist.</p>
<pre><code class="language-cpp">#define WIN32_LEAN_AND_MEAN

#include &lt;js.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#include &lt;windowsx.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;

using namespace std;

CRITICAL_SECTION csQueueInAccess;

#define MAX_THREADS 3

jsJoystick *js;
float      *ax;

int count  = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;

int index = 0;

float aend[3];
float ausg[3];

int b;
int j;

DWORD WINAPI ThreadFunc(LPVOID data)
{
	EnterCriticalSection(&amp;csQueueInAccess);

		while (0.05 &lt; ax[j] || ax[j] &lt; -0.05)
		{
			count4 = count3 + 1;
			Sleep(1000);

			while (count4&gt;count3 &amp;&amp; (0.05 &lt; ax[j] || ax[j] &lt; -0.05))
			{
				aend[j] = ax[j] * 5;
				ausg[j] += aend[j];
				js-&gt;read (&amp;b, ax);
				ax[j] = floorf(ax[j]*100 + .5)/100.;
			}

			aend[j] = 0;
			ausg[j] = 0;
		}

		printf (&quot;%+.1f &quot;, ausg[j]);

	return((DWORD)data);

	LeaveCriticalSection(&amp;csQueueInAccess);

}

int main ( int, char ** )
{
 	HANDLE hThread[MAX_THREADS];
	DWORD  dwThreadID[MAX_THREADS];

	InitializeCriticalSection(&amp;csQueueInAccess);

	jsInit ();

	js = new jsJoystick (0);

	if (js-&gt;notWorking ())
		printf (&quot;Joystick not detected\n&quot;);
	else
		printf (&quot;Joystick is \&quot;%s\&quot;\n\n&quot;, js-&gt;getName());

	if (js-&gt;notWorking ()) 
		exit (1);

	ax = new float [js-&gt;getNumAxes ()];

	count2 = count + 1;
	Sleep (30);
	while (count2&gt;count)
	{
		printf (&quot;Joystick test program.\n&quot;);
		printf (&quot;~~~~~~~~~~~~~~~~~~~~~~\n\n&quot;);

		printf (&quot;+---------JS----------&quot;);

		printf (&quot;+----------------+\n&quot;);

		printf (&quot;| Btns &quot;);

		for (j = 0 ; j &lt; 3 ; j++)
			printf (&quot;Ax:%d &quot;, j);

		for ( ; j &lt; 3 ; j++ )
			printf (&quot;     &quot;);

		printf (&quot;|&quot;);

		printf (&quot;   Aenderung    |\n&quot;);

		printf (&quot;+---------------------&quot;);

		printf (&quot;+----------------+\n&quot;);

		js-&gt;read (&amp;b, ax);

		printf (&quot;| %04x &quot;, b);

		for (j = 0 ; j &lt; 3 ; j++)
		{
			ax[j] = floorf(ax[j]*100 + .5)/100.;
			printf (&quot;%+.1f &quot;, ax[j]);
		}

		printf(&quot;| &quot;);

		for (index = 0; index &lt; 2; index++)
		{

			for (j = 0; j &lt; 2; j++)
			{

				if (0.05 &lt; ax[j] || ax[j] &lt; -0.05)
				{
					hThread[index] = CreateThread(NULL,				
												  0,				
												  ThreadFunc,		
												  (LPVOID)index,	
												  0,				
												  &amp;dwThreadID[index]);

					WaitForSingleObject(hThread[index], 15);
					CloseHandle(hThread[index]);
				}

			}
		}

		system(&quot;cls&quot;);
	}

	DeleteCriticalSection(&amp;csQueueInAccess);

	getchar();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821151</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Fri, 11 Dec 2009 11:58:12 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 13:06:23 GMT]]></title><description><![CDATA[<p>laura84 schrieb:</p>
<blockquote>
<p>Naja um ehrlich zu sein weil ich nicht wüsste wie ich sonst diese Zeilen ausgeben könnte:</p>
<pre><code class="language-cpp">printf (&quot;Joystick is \&quot;%s\&quot;\n\n&quot;, js-&gt;getName());
</code></pre>
<pre><code class="language-cpp">printf (&quot;%+.1f &quot;, ax[j]);
</code></pre>
</blockquote>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Joystick is \&quot;&quot; &lt;&lt; js-&gt;getName() &lt;&lt; &quot;&quot;\&quot; &lt;&lt; endl &lt;&lt; endl;
</code></pre>
<pre><code class="language-cpp">cout &lt;&lt; setprecision(2) &lt;&lt; ax[j];
</code></pre>
<p>laura84 schrieb:</p>
<blockquote>
<p>Mittlerweile ist mir noch aufgefallen, dass die Verzögerung jetzt wohl klappt, aber nur beim ersten mal Joystick bewegen und wenn ich dann wieder auf Null gehe ruft er mir nie wieder den Thread auf, egal wie ich den Joystick bewege. Außerdem wird immer nur eine Achse beachtet, wenn ich gleichzeitig nach oben und nach rechts drücke nimmt er nur die Achse die zuerst btätigt wurde.</p>
</blockquote>
<p>Ich blicke da leider immer noch nicht ganz durch. Vielleicht kannst du das mal kommentieren. Was ich aber denke ist, dass du aus den Schleifen nie wieder rauskommst, weil sich die Bedingung wärend der Schleife nicht ändert. Auch das j bleibt immer gleich. Vielleicht ist das der Grund, warum immer nur eine Achse beachtet wird. Ich denke langsam dämmert mir, was du machen möchtest. Du möchtest wahrscheinlich alle Threads parallel laufen lassen, wartest mit dem starten des nächsten Threads aber immer, bis der letzte fertig ist, was nie passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821184</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Fri, 11 Dec 2009 13:06:23 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 13:13:26 GMT]]></title><description><![CDATA[<p>Eine zusätzlich Anmerkung: Falls du wirklich alle Threads parallel laufen lassen möchtest, kannst du das natürlich nicht mit der globalen Variable j machen, da diese für alle Threads gleich ist und somit jeder Thread dasselbe machen würde, Du müsstest statdessen jedem thread sein eigenes j als parameter mitgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821189</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Fri, 11 Dec 2009 13:13:26 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 13:28:18 GMT]]></title><description><![CDATA[<p>Bei näherem überlegen bin ich mir nicht mehr sicher, ob du Threads parallel laufen lassen möchtest. Vielleicht vergisst du nur, die Werte für ax in der Schleife neu zu lesen. Ich denke das Problem ist, dass ax in der Schleife konstant ist.</p>
<p>Wobei ich sehe gerade. Das machst du schon. Daran kann es nicht liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821192</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Fri, 11 Dec 2009 13:28:18 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 13:41:36 GMT]]></title><description><![CDATA[<p>Oh man ich weis es langsam selber nicht mehr. Bin mittlerweile schon total verwirrt und mach immer mehr kaputt als das es besser wird.</p>
<pre><code class="language-cpp">cout &lt;&lt; setprecision(2) &lt;&lt; ax[j];
</code></pre>
<p>Funktioniert leider nicht so richtig, da ich auch wenn der Wert Null ist gerne &quot;0.0&quot; da stehen haben würde und nicht nur &quot;0&quot;. Alle Anderen &quot;fprint&quot; habe ich jetzt aber durch &quot;cout&quot; ersetzt. Danke für den Code.</p>
<p>Also ich frag in den Schleifen schon nochmal neu ab. Das komische ist wenn ich Haltepunkte setze und es dann Schritt für Schritt ablaufen lasse funktioniert es. Zwar nur beim ersten mal Joystick bewegen und auch nur für eine Achse, aber es funktioniert. Wenn ich das Programm ohen Haltepunkte laufen lasse, dann spinnt es total rum und gibt immer irgend einen Schmarrn aus.</p>
<p>Komisch ist auch dass wenn er in die Thread Funktion reinspringt, beim debuggen, dann springt er manchmal einfach so wieder in die main und dann wieder in die Thread Funktion, an irgendeinem Punkt. Das ist wirklich total komisch, denn er hat überhaupt keinen Grund dafür.</p>
<p>Ich verzweifel langsam an diesem Programm!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821206</guid><dc:creator><![CDATA[laura84]]></dc:creator><pubDate>Fri, 11 Dec 2009 13:41:36 GMT</pubDate></item><item><title><![CDATA[Reply to Variable im Register verändern on Fri, 11 Dec 2009 14:25:18 GMT]]></title><description><![CDATA[<p>laura84 schrieb:</p>
<blockquote>
<p>Oh man ich weis es langsam selber nicht mehr. Bin mittlerweile schon total verwirrt und mach immer mehr kaputt als das es besser wird.</p>
</blockquote>
<p>Wenn du es nicht weist wer dann? <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="🙂"
    /> Wenn das Konzept falsch oder nicht erkennbar ist, bringt es meistens nichts an einzelnen Codezeilen runzudoktorn. Mach lieber mal ne Pause oder schlaf ne nacht drüber und überlege dir dann nochmal ein Lösungskonzept und skizziere das in pseudocode oder anders.</p>
<p>laura84 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cout &lt;&lt; setprecision(2) &lt;&lt; ax[j];
</code></pre>
<p>Funktioniert leider nicht so richtig, da ich auch wenn der Wert Null ist gerne &quot;0.0&quot; da stehen haben würde und nicht nur &quot;0&quot;.</p>
</blockquote>
<p>Es funktioniert schon richtig, es mach aber nicht was du möchtest <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="😉"
    /> Es gibt für alles eine Lösung:</p>
<pre><code class="language-cpp">cout &lt;&lt; fixed &lt;&lt; setprecision(2) &lt;&lt; ax[j];
</code></pre>
<p>laura84 schrieb:</p>
<blockquote>
<p>Das komische ist wenn ich Haltepunkte setze und es dann Schritt für Schritt ablaufen lasse funktioniert es&quot;. Zwar nur beim ersten mal Joystick bewegen und auch nur für eine Achse, aber es funktioniert. Wenn ich das Programm ohen Haltepunkte laufen lasse, dann spinnt es total rum und gibt immer irgend einen Schmarrn aus.</p>
</blockquote>
<p>Das hört sich nach nem Synchronisationsproblem zwischen den Threads an. Dürfte aber eigentlich nicht sein.</p>
<p>laura84 schrieb:</p>
<blockquote>
<p>Komisch ist auch dass wenn er in die Thread Funktion reinspringt, beim debuggen, dann springt er manchmal einfach so wieder in die main und dann wieder in die Thread Funktion, an irgendeinem Punkt. Das ist wirklich total komisch, denn er hat überhaupt keinen Grund dafür.</p>
</blockquote>
<p>Womit debuggst du denn? Wird dir angezeigt, dass zwei Threads laufen? Wenn er wieder in die main springt läuft dann der zweite Thread noch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821232</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Fri, 11 Dec 2009 14:25:18 GMT</pubDate></item></channel></rss>