<?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[while-Schleife und GUI gleichzeitig zum laufen bringen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich sitze hier vor einer Anwendung und stehe gerade ein wenig auf dem Schlauch. Folgendes Szenario:</p>
<p>Ich habe 2 in Qt Programmierte GUI's, die sich über Mico Corba &quot;unterhalten&quot; sollen, d.h. wenn ich bei Anwendung A einen Button betätige, soll bei Anwendung B etwas passieren.</p>
<p>Das Problem ist nun folgendes, dass in Anwendung B eine ständige while-Schleife laufen muss, die darauf wartet ob von A etwas kommt.</p>
<p>Wenn ich diese Methode allerdings vor der Anwendung starte, wirde diese natürlich nicht mehr angezeigt. Andererseits kann ich nach dem Anzeigen von B, also nach app.exec(), hinschreiben was ich will, es wird nicht ausgeführt.</p>
<p>Gibt es irgendeine Möglichkeit, wie ich diese Schleife laufen lassen kann, ohen dabei den rest meines Programmes zu blockieren? Man muss dazu sagen, dass ich noch nicht so wirklich der C++-Crack bin <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>Schonmal danke für die Antworten.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185172/while-schleife-und-gui-gleichzeitig-zum-laufen-bringen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 03:06:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185172.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Jun 2007 13:00:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to while-Schleife und GUI gleichzeitig zum laufen bringen on Fri, 22 Jun 2007 13:00:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich sitze hier vor einer Anwendung und stehe gerade ein wenig auf dem Schlauch. Folgendes Szenario:</p>
<p>Ich habe 2 in Qt Programmierte GUI's, die sich über Mico Corba &quot;unterhalten&quot; sollen, d.h. wenn ich bei Anwendung A einen Button betätige, soll bei Anwendung B etwas passieren.</p>
<p>Das Problem ist nun folgendes, dass in Anwendung B eine ständige while-Schleife laufen muss, die darauf wartet ob von A etwas kommt.</p>
<p>Wenn ich diese Methode allerdings vor der Anwendung starte, wirde diese natürlich nicht mehr angezeigt. Andererseits kann ich nach dem Anzeigen von B, also nach app.exec(), hinschreiben was ich will, es wird nicht ausgeführt.</p>
<p>Gibt es irgendeine Möglichkeit, wie ich diese Schleife laufen lassen kann, ohen dabei den rest meines Programmes zu blockieren? Man muss dazu sagen, dass ich noch nicht so wirklich der C++-Crack bin <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>Schonmal danke für die Antworten.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1311475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311475</guid><dc:creator><![CDATA[Spitty]]></dc:creator><pubDate>Fri, 22 Jun 2007 13:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to while-Schleife und GUI gleichzeitig zum laufen bringen on Fri, 22 Jun 2007 13:43:52 GMT]]></title><description><![CDATA[<p>Die Lösung in einem Wort: Threads oder Timer.</p>
<p>Ansatz A (Threads):<br />
Am Anfang von Programm B startest du einen zweiten Thread, der deine while-Schleife enthält. Der kann dann nebenher weiterlaufen, während der Hauptthread die GUI anzeigt und auf Eingaben reagiert. Wenn im Zweitthread etwas passiert, informiert er den GUI-Thread darüber und der gibt die Informationen an den User weiter.</p>
<p>Ansatz B (Timer):<br />
Du startest am Anfang einen Timer mit einer Laufzeit von wenigen Millisekunden. Und in der zugehöhrigen OnTimer-Verarbeitung fragst du dann, ob am Eingang etwas passiert ist:</p>
<pre><code class="language-cpp">void OnTimer()
{
  if(data_avaiable())//hierher kommt die Wartebedingung deiner Schleife
    process_data();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1311538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311538</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Jun 2007 13:43:52 GMT</pubDate></item><item><title><![CDATA[Reply to while-Schleife und GUI gleichzeitig zum laufen bringen on Fri, 22 Jun 2007 14:51:48 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort.</p>
<p>Leider weiss ich bei beiden Vorschlägen jetzt gerade absolut nicht, wie ich da anfangen muesste. Ich hab zwar ein ganz gutes Buch, wo auch Threads beschrieben werden, allerdings kann ich die Beispiele dort nicht auf mein Programm übertragen.</p>
<p>Programm B sieht grob gesagt folgendermaßen aus:</p>
<pre><code class="language-cpp">Anwendung::Anwendung(QStackedWidget *parent) : QStackedWidget(parent)
{
	createSeite1();
	createSeite2();

	addWidget(Seite1);
	addWidget(Seite2);

}
</code></pre>
<p>Gestartet wird dann folgendermaßen:</p>
<p>main.cpp:</p>
<pre><code class="language-cpp">int main( int argc, char ** argv )
{
	QApplication app( argc, argv );

	Anwendung *unit = new Anwendung();
	unit-&gt;setGeometry(500, 500, 480, 640);
	Anwendung::setWidgetBackgroundColor(unit, Qt::black);

	/* Es wird eine Verbindung zur Datenbank hergestellt */
	if (!unit-&gt;createConnection())
	{
		return 1;
	}

	/* Sichtbarmachen des Fensters */
	unit-&gt;show();

	/* Ausführen des gesamten Programmes */
	return app.exec();
}
</code></pre>
<p>Das Problem ist die Methode getButtons, die ungefähr so aussieht:</p>
<pre><code class="language-cpp">short Anwendung::getButton(Button button)
{
	while (1)
	{
		if ( ButtonsQueue-&gt;ReceiveEntry(button))
		{
			printf(&quot;Empfange Taste %d \n&quot;,button);
		}
	usleep(10);
	}
	return(button);
}
</code></pre>
<p>Wie gesagt hab ich jetzt leider überhaupt keine Ahnung wie ich dieses Gerüst jetzt in Threads umsetzten kann. Vielleicht hat ja noch jemand einen kleinen Tipp o.ä. parat.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1311591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311591</guid><dc:creator><![CDATA[Spitty]]></dc:creator><pubDate>Fri, 22 Jun 2007 14:51:48 GMT</pubDate></item><item><title><![CDATA[Reply to while-Schleife und GUI gleichzeitig zum laufen bringen on Sat, 23 Jun 2007 08:46:04 GMT]]></title><description><![CDATA[<p>qt bietet für sich wiederholende aufgaben ne timer klasse an <a href="http://doc.trolltech.com/4.3/qtimer.html" rel="nofollow">http://doc.trolltech.com/4.3/qtimer.html</a><br />
die kümmert sich im hintergrund darum, dass threads angeschubst werden usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1311949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311949</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Sat, 23 Jun 2007 08:46:04 GMT</pubDate></item><item><title><![CDATA[Reply to while-Schleife und GUI gleichzeitig zum laufen bringen on Sat, 23 Jun 2007 16:33:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also, ich habe jetzt versucht das ganze mit einem Timer zu realisieren, und es läuft auch schon einigermaßen, alledings ist noch ein Fehler drin, den ich nicht finde.</p>
<p>Ich rufe in meinem Konstruktor die Methode getButton() auf, welche folgendermaßen aussieht:</p>
<pre><code class="language-cpp">void DisplayUnit::getButton()
{

	timer = new QTimer(this);
	connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer-&gt;start(100);
}
</code></pre>
<p>Der Slot update() ist so implementiert:</p>
<pre><code class="language-cpp">void DisplayUnit::update()
{

		if ( m_CDUPushedButtonsQueue-&gt;ReceiveEntry(Button))
		{
			switch (m_CDUPushedButtonsQueue-&gt;ReceiveEntry(Button))
			{
				case 0: slotPage1();
						printf(&quot;Empfange Taste %d \n&quot;,Button);
						break;

				case 1: slotPage2();
						printf(&quot;Empfange Taste %d \n&quot;,Button);
						break;
			}	
		}
}
</code></pre>
<p>Jetzt habe ich noch folgende Probleme:</p>
<ol>
<li>
<p>Egal welcher Button in Anwendung A gedrückt wird, es wird immer der slotPage1 ausgeführt, auch wenn z.B. der Button 15 gedrückt wird.</p>
</li>
<li>
<p>Obwohl die Ausgabe bei Anwendung A sagt, dass Button x gesendet wurde, als Ausgabe von B erscheint immer die Zahl 4223872, die ich mir überhaupt nicht erklären kann</p>
</li>
<li>
<p>Der slotPage2 wird nie ausgeführt, d.h. sobald ich bei Anwendung A irgendeinen Button drücke spring Anwendung B wie gewünscht zur Page2, wenn ich dann wieder Button 1 o.ä drücke passiert gar nichts.</p>
</li>
</ol>
<p>Ich hab mit den Code jetzt 10 Mal durchgelesen, aber ich komme irgendwie nicht auf den Fehler.</p>
<p>EDIT: Füge ich in der update() vor der switch-Anweisung die Zeile ein</p>
<p>cout &lt;&lt; Button &lt;&lt; endl;</p>
<p>wird komischerweise noch die richtige zahl ausgegeben, der Fehler muss also irgendwo in der switch-Anweisung liegen <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>
<p>EDIT2: PROBLEM GELÖST, mit switch(Button) anstelle von switch(m_CDUPushedButtonsQueue-&gt;ReceiveEntry(Button)) funktioniert es wie gewünscht</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312264</guid><dc:creator><![CDATA[Spitty]]></dc:creator><pubDate>Sat, 23 Jun 2007 16:33:46 GMT</pubDate></item></channel></rss>