<?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[Memory Leak im Thread]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Thread erzeugt, der auch wunderbar funktioniert.</p>
<p>Problem bei der ganze Sache ist, dass ich den m_bAutoDelete auf FALSE habe und dass Objekt später per Delete lösche. Trotzdem bekomme ich Memory Leaks.</p>
<p>Wenn ich m_bAutoDelete aber auf TRUE packe, bekomme ich keine Leaks. Demnach zur Folge muss ich doch noch irgendwas vergessen haben oder nicht?</p>
<p>Schaut bitte mal kurz drüber.</p>
<p>//Header</p>
<pre><code class="language-cpp">CWinThread* thread;
BOOL threadstart;
BOOL abbruch;
DWORD ExitCode;
static UINT Starten(LPVOID pParam);
</code></pre>
<p>//CPP Datei</p>
<pre><code class="language-cpp">//Wird ausgeführt wenn Button OK gedrückt wird

this-&gt;thread =  AfxBeginThread(Starten,this,THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if( thread != NULL)
{
	thread-&gt;m_bAutoDelete = FALSE;
	thread-&gt;ResumeThread();
}
else
{
	// Thread konnte nicht gestartet werden.
}
</code></pre>
<pre><code class="language-cpp">//Wird ausgeführt wenn CANCEL gedrückt wird
this-&gt;abbruch = TRUE;
if ( this-&gt;threadstart )
{
	while(WaitForSingleObject(this-&gt;thread-&gt;m_hThread, INFINITE) != WAIT_OBJECT_0);

	GetExitCodeThread(this-&gt;thread-&gt;m_hThread,&amp;ExitCode);
	if ( ExitCode == 1 )
	{
		this-&gt;threadstart = FALSE;
		this-&gt;thread-&gt;Delete();
		test.Close();
		OnCancel();
	}
}
else
{
	test.Close();
	OnCancel();
}
</code></pre>
<pre><code class="language-cpp">//Der Thread
UINT CTestThreadDlg::Starten(void *pParam)
{
	CTestThreadDlg* lpouterThis = (CTestThreadDlg*) pParam;
	lpouterThis-&gt;threadstart = TRUE;
	int i = 0;
	while ( i == 0 )
	{
		lpouterThis-&gt;test.WriteString(&quot;Testthread\n&quot;);
		if ( lpouterThis-&gt;abbruch )
		{

			lpouterThis-&gt;threadstart = FALSE;
			break;

		}
	}
	AfxEndThread(1,TRUE);
	return 0;
}
</code></pre>
<p>Ich weiß, dass das mit der Endlosschleife unschön ist, aber das jetzt nur son Testding damit ich den Fehler finden kann.</p>
<p>Also wie gesagt: So wie der Code oben gezeigt ist, bekomme ich Memory Leaks, wenn ich m_bAutoDelete aber auf TRUE setzte, bekomm ich keine.</p>
<p>Was hab ich vergessen? <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/topic/156998/memory-leak-im-thread</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 09:31:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156998.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Aug 2006 12:21:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Memory Leak im Thread on Tue, 22 Aug 2006 12:21:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen Thread erzeugt, der auch wunderbar funktioniert.</p>
<p>Problem bei der ganze Sache ist, dass ich den m_bAutoDelete auf FALSE habe und dass Objekt später per Delete lösche. Trotzdem bekomme ich Memory Leaks.</p>
<p>Wenn ich m_bAutoDelete aber auf TRUE packe, bekomme ich keine Leaks. Demnach zur Folge muss ich doch noch irgendwas vergessen haben oder nicht?</p>
<p>Schaut bitte mal kurz drüber.</p>
<p>//Header</p>
<pre><code class="language-cpp">CWinThread* thread;
BOOL threadstart;
BOOL abbruch;
DWORD ExitCode;
static UINT Starten(LPVOID pParam);
</code></pre>
<p>//CPP Datei</p>
<pre><code class="language-cpp">//Wird ausgeführt wenn Button OK gedrückt wird

this-&gt;thread =  AfxBeginThread(Starten,this,THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if( thread != NULL)
{
	thread-&gt;m_bAutoDelete = FALSE;
	thread-&gt;ResumeThread();
}
else
{
	// Thread konnte nicht gestartet werden.
}
</code></pre>
<pre><code class="language-cpp">//Wird ausgeführt wenn CANCEL gedrückt wird
this-&gt;abbruch = TRUE;
if ( this-&gt;threadstart )
{
	while(WaitForSingleObject(this-&gt;thread-&gt;m_hThread, INFINITE) != WAIT_OBJECT_0);

	GetExitCodeThread(this-&gt;thread-&gt;m_hThread,&amp;ExitCode);
	if ( ExitCode == 1 )
	{
		this-&gt;threadstart = FALSE;
		this-&gt;thread-&gt;Delete();
		test.Close();
		OnCancel();
	}
}
else
{
	test.Close();
	OnCancel();
}
</code></pre>
<pre><code class="language-cpp">//Der Thread
UINT CTestThreadDlg::Starten(void *pParam)
{
	CTestThreadDlg* lpouterThis = (CTestThreadDlg*) pParam;
	lpouterThis-&gt;threadstart = TRUE;
	int i = 0;
	while ( i == 0 )
	{
		lpouterThis-&gt;test.WriteString(&quot;Testthread\n&quot;);
		if ( lpouterThis-&gt;abbruch )
		{

			lpouterThis-&gt;threadstart = FALSE;
			break;

		}
	}
	AfxEndThread(1,TRUE);
	return 0;
}
</code></pre>
<p>Ich weiß, dass das mit der Endlosschleife unschön ist, aber das jetzt nur son Testding damit ich den Fehler finden kann.</p>
<p>Also wie gesagt: So wie der Code oben gezeigt ist, bekomme ich Memory Leaks, wenn ich m_bAutoDelete aber auf TRUE setzte, bekomm ich keine.</p>
<p>Was hab ich vergessen? <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/1122069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122069</guid><dc:creator><![CDATA[MSS-Software]]></dc:creator><pubDate>Tue, 22 Aug 2006 12:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Leak im Thread on Tue, 22 Aug 2006 12:50:48 GMT]]></title><description><![CDATA[<p>CWinThread::Delete macht eigentlich so gut wie nichts. Es löscht das Objekt, bzw. gibt den Speicher frei, aber nur wenn m_bAutoDelete auf TRUE ist ^^</p>
<p>Was du also tun musst ist ganz einfach:</p>
<pre><code class="language-cpp">delete this-&gt;thread;
</code></pre>
<p>Also das CWinThread Objekt löschen.</p>
<p>Grüssli ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122100</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 22 Aug 2006 12:50:48 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Leak im Thread on Tue, 22 Aug 2006 12:58:33 GMT]]></title><description><![CDATA[<p>jeppa juppi du</p>
<p>warum bin ich da eigentlich net gleich druf gekommen?</p>
<p>hat mich etwa die Delete() funktion so ausm Konzept gebracht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122112</guid><dc:creator><![CDATA[MSS-Software]]></dc:creator><pubDate>Tue, 22 Aug 2006 12:58:33 GMT</pubDate></item></channel></rss>