<?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[Probleme mit Threads]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>so hab leider gerade ein paar Probleme mit einem Thread. Der Thread wird gestartet und soll wieder beendet werden.</p>
<p>Was ist das Problem?<br />
Das Problem ist, wenn ich in dem Standard-Thread die m_bInitUpdateThreadShudown Variable auf TRUE setzen, um die While-schleife zu unterbrechen, bleibt diese konstant -&gt; wird nicht beendet?</p>
<p>Sieht jemand ein Problem?</p>
<p>Def:</p>
<pre><code>static DWORD WINAPI UpdateThread( LPVOID lpParam );
	int CreateUpdateThread();
	int TerminateUpdateThread();
</code></pre>
<p>Inits (Konstruktor)</p>
<pre><code>m_bInitUpdateThreadShutdown	= FALSE;
	m_bUpdateThreadRunning		= FALSE;
</code></pre>
<pre><code>DWORD WINAPI CManager::UpdateThread( LPVOID lpParam )
{

	CManager *pManager = (CManager*)lpParam;
	pManager-&gt;m_bUpdateThreadRunning = TRUE;

	// while running start update (ist zuerst auf FALSE bis sie beim beenden auf true gesetzt wird
	while( pManager-&gt;m_bInitUpdateThreadShutdown == FALSE )
	{
		// tue was
	}

	// set running falue to false
	pManager-&gt;m_bUpdateThreadRunning = FALSE;
	return 1;
}
</code></pre>
<p>So hier wird der Thread erstellt.</p>
<pre><code>if( m_hUpdateThread == NULL )
	{
		m_hUpdateThread = CreateThread( NULL, 
						0, 
						CManager::UpdateThread, 
						(LPVOID)this, 
						0, 
						0 );
		// setup running var
		if( m_hUpdateThread )
		{
                        //success
			return 1;
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/181082/probleme-mit-threads</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 23:26:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181082.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 May 2007 18:47:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Threads on Wed, 09 May 2007 18:47:52 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>so hab leider gerade ein paar Probleme mit einem Thread. Der Thread wird gestartet und soll wieder beendet werden.</p>
<p>Was ist das Problem?<br />
Das Problem ist, wenn ich in dem Standard-Thread die m_bInitUpdateThreadShudown Variable auf TRUE setzen, um die While-schleife zu unterbrechen, bleibt diese konstant -&gt; wird nicht beendet?</p>
<p>Sieht jemand ein Problem?</p>
<p>Def:</p>
<pre><code>static DWORD WINAPI UpdateThread( LPVOID lpParam );
	int CreateUpdateThread();
	int TerminateUpdateThread();
</code></pre>
<p>Inits (Konstruktor)</p>
<pre><code>m_bInitUpdateThreadShutdown	= FALSE;
	m_bUpdateThreadRunning		= FALSE;
</code></pre>
<pre><code>DWORD WINAPI CManager::UpdateThread( LPVOID lpParam )
{

	CManager *pManager = (CManager*)lpParam;
	pManager-&gt;m_bUpdateThreadRunning = TRUE;

	// while running start update (ist zuerst auf FALSE bis sie beim beenden auf true gesetzt wird
	while( pManager-&gt;m_bInitUpdateThreadShutdown == FALSE )
	{
		// tue was
	}

	// set running falue to false
	pManager-&gt;m_bUpdateThreadRunning = FALSE;
	return 1;
}
</code></pre>
<p>So hier wird der Thread erstellt.</p>
<pre><code>if( m_hUpdateThread == NULL )
	{
		m_hUpdateThread = CreateThread( NULL, 
						0, 
						CManager::UpdateThread, 
						(LPVOID)this, 
						0, 
						0 );
		// setup running var
		if( m_hUpdateThread )
		{
                        //success
			return 1;
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1281888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281888</guid><dc:creator><![CDATA[JayJay]]></dc:creator><pubDate>Wed, 09 May 2007 18:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Wed, 09 May 2007 19:40:17 GMT]]></title><description><![CDATA[<p>Sind die Member von <em><strong>CManager</strong></em></p>
<pre><code class="language-cpp">bool m_bInitUpdateThreadShutdown;
bool m_bUpdateThreadRunning;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">static bool m_bInitUpdateThreadShutdown;
static bool m_bUpdateThreadRunning;
</code></pre>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281934</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Wed, 09 May 2007 19:40:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Wed, 09 May 2007 21:14:34 GMT]]></title><description><![CDATA[<p>Erstmal muss ich sagen dass das OP ein sehr schönes Codefragment ist; sprechend benannt und gut ziziert usw.</p>
<p>Das sieht eignetlich alles blitzsauber aus; ich glaub zwar nicht dass es um die Flags zu &quot;Racing&quot; kommt, aber wieviele weitere Zyklen hast Du denn gezählt ( &gt;2 ?) ? Testausschrift oder Debugger?</p>
<p>Du hast nicht zufällig nur ein &quot;=&quot; zuviel und schreibst statt</p>
<pre><code class="language-cpp">m_bInitUpdateThreadShutdown = TRUE;
</code></pre>
<pre><code class="language-cpp">m_bInitUpdateThreadShutdown == TRUE;
</code></pre>
<p>?</p>
<p>Sonst fällt mir da gar nichts Verdächtiges auf; ganz im Gegenteil!</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282011</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Wed, 09 May 2007 21:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Wed, 09 May 2007 21:42:53 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Also ich habe die Variablen ohne Static initiiert -&gt; Das müssten sich auch nicht (bitte korrigiert mich, wenn was falsch ist).</p>
<p>Das habe ich zuerst auch gedacht, dass evt. eine Vergleichsoperation mit einer Übergabe Operation verdauscht wurde. Dem ist jedoch nicht so.<br />
Alles sollte seine Richtigkeit haben - bin momentan etwas aufgeschmissen probiere jetzt seit ein paar Tagen.</p>
<p>An dieser Stelle ein großes Danke für die schnelle Antwort! Falls jemand nochwas dazu einfällt könnte das hier mal posten! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282021</guid><dc:creator><![CDATA[JayJay]]></dc:creator><pubDate>Wed, 09 May 2007 21:42:53 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Wed, 09 May 2007 22:16:20 GMT]]></title><description><![CDATA[<p>Wie und wo setzt der &quot;Standard-Thread&quot; Member &quot;m_bInitUpdateThreadShutdown&quot; auf TRUE ?<br />
Eventuell ist der übergebene this-pointer dort nicht mehr gültig ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282032</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 09 May 2007 22:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Wed, 09 May 2007 22:28:14 GMT]]></title><description><![CDATA[<p>Also ich warte, bis mein Dialog ein Signal erhält (Button!). Ich greife über eine static CBaseApp *pBasApp; Variable auf die Basis klasse zu und rufe &quot;Release&quot; auf.</p>
<p>Das Klappt wunderbar, erhalte schöne Nacrichten! <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>
<pre><code>//------------------------------------------------------------------
int CTableManager::TerminateUpdateThread()
{
	if( m_bUpdateThreadRunning )
	{
		//::TerminateThread( this-&gt;m_hUpdateThread, 0 );
		this-&gt;m_bInitUpdateThreadShutdown = TRUE;
		while( m_bUpdateThreadRunning )
		{
                      // warte bis der Thread beendet ist (das kommt nicht zm Ende)
		}//while
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1282034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282034</guid><dc:creator><![CDATA[JayJay]]></dc:creator><pubDate>Wed, 09 May 2007 22:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Thu, 10 May 2007 22:08:54 GMT]]></title><description><![CDATA[<p>JayJay schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//------------------------------------------------------------------
int CTableManager::TerminateUpdateThread()
{
	if( m_bUpdateThreadRunning )
	{
		//::TerminateThread( this-&gt;m_hUpdateThread, 0 );
		this-&gt;m_bInitUpdateThreadShutdown = TRUE;
		while( m_bUpdateThreadRunning )
		{
                      // warte bis der Thread beendet ist (das kommt nicht zm Ende) (*)
		}//while
	}
}
</code></pre>
</blockquote>
<p>Bei (*) ist doch wohl ein Sleep oder sowas drin? Sonst wär der Hauptthread ein wenig zu dominant um dem UpdateThread Zeit für's toggling geben. <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>Btw. ist dieser Threadmanager ein Singleton oder wird zumindest so benuztzt?<br />
<strong>Bau doch mal einen statischen Counter in die Manager-Klasse ein</strong> (<strong>Alle</strong> ctors : ++counter_/dtor --counter_, Copy-ctor sollte definiert sein); wenn Du die Instanzvariable eines anderen Manager setzt hat der Thread natürlich keine Chance das mitzukriegen; er kennt ja nur die Instanz die er sich aus dem Thread-Parameter gecastet hat!</p>
<p>Vielleicht wird da irgendwo implizit kopiert?</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282703</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Thu, 10 May 2007 22:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Thu, 10 May 2007 22:46:05 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>JayJay schrieb:</p>
<blockquote>
<pre><code class="language-cpp">while( m_bUpdateThreadRunning )
		{
                      // warte bis der Thread beendet ist (das kommt nicht zm Ende) (*)
		}//while
</code></pre>
</blockquote>
<p>Bei (*) ist doch wohl ein Sleep oder sowas drin? Sonst wär der Hauptthread ein wenig zu dominant um dem UpdateThread Zeit für's toggling geben. <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>
</blockquote>
<p>ich würde das nicht mit solchen bool-variablen hinfrickeln. dafür gibt's doch schicke APIs --&gt; <a href="http://msdn2.microsoft.com/en-us/library/ms687032.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms687032.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282710</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Thu, 10 May 2007 22:46:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Fri, 11 May 2007 00:15:09 GMT]]></title><description><![CDATA[<p>Prüfe auch mal wie Gast++ vorschlagen hat, ob &quot;<strong>static</strong> CBaseApp *pBasApp;&quot; eventuell überschrieben, bzw. mehrmals initialisiert wird.</p>
<p>Vielleicht liegt folgendes Problem vor :</p>
<pre><code class="language-cpp">//-----------------------------------------------------
//-----------------------------------------------------
int CTableManager::TerminateUpdateThread()
{
...
 if( m_bUpdateThreadRunning )
 {
...
  this-&gt;m_bInitUpdateThreadShutdown = TRUE; // &lt;- dieser this-pointer ist...
...
 }

}
//-----------------------------------------------------
//-----------------------------------------------------
if( m_hUpdateThread == NULL )
{
  m_hUpdateThread = CreateThread( NULL, 
                    0, 
                    CManager::UpdateThread, 
                    (LPVOID)this,           // &lt;- ungleich jenem
                    0, 
                    0 );
...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1282722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282722</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 11 May 2007 00:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Fri, 11 May 2007 22:10:04 GMT]]></title><description><![CDATA[<p>So hab einen Sleep(50); reingemacht und klappt soweit wunderbar.</p>
<p>Hat jemand Ideen, wie ich evt. Synchronisationen ohne bool variablen organisieren kann? gibt es generelle Einwände?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283263</guid><dc:creator><![CDATA[JayJay]]></dc:creator><pubDate>Fri, 11 May 2007 22:10:04 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Sat, 12 May 2007 16:20:06 GMT]]></title><description><![CDATA[<p>JayJay schrieb:</p>
<blockquote>
<p>So hab einen Sleep(50); reingemacht und klappt soweit wunderbar.</p>
<p>Hat jemand Ideen, wie ich evt. Synchronisationen ohne bool variablen organisieren kann? gibt es generelle Einwände?</p>
</blockquote>
<p>Events</p>
<p><a href="http://www.codeproject.com/win32/Win32_Event_Handling.asp" rel="nofollow">http://www.codeproject.com/win32/Win32_Event_Handling.asp</a></p>
<p>sind eine Möglichkeit; was genau willst Du denn machen?</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1283593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1283593</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sat, 12 May 2007 16:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Threads on Sun, 13 May 2007 18:51:39 GMT]]></title><description><![CDATA[<p>Deine &quot;while (m_bUpdateThreadRunning) {}&quot; Schleife kommt deswegen ohne Sleep() nicht zu einem Ende, weil der Zugriff auf m_bUpdateThreadRunning wegoptimiert wurde. Rufst du dagegen eine Systemfunktion wie Sleep in der Schleife auf kann der Compiler den Zugriff nichtmehr wegoptimieren, und es funktioniert.</p>
<p>Der eigentliche Fehler ist nicht dass Sleep nicht aufgerufen wurde, sondern dass ohne Synchronisation von 2 Threads auf eine Variable zugegriffen wird.</p>
<p>In so einem Fall sollte man critical sections verwenden, oder ne Mutex, oder eben nen Event an Stelle der Variable.<br />
Und warten bis der Thread terminiert kann man einfach indem man auf das Thread Handle wartet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284223</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 13 May 2007 18:51:39 GMT</pubDate></item></channel></rss>