<?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[Problem mit Thread und Steuerelement]]></title><description><![CDATA[<p>Morgen,</p>
<p>ich habe mir einen Arbeitsthread erstellt, der ein Steuerelement mit Werten füllen soll.</p>
<p>//Header</p>
<pre><code class="language-cpp">static UINT AnzeigeAktualisieren(LPVOID pParam);
BOOL abbruch;
BOOL threadstart;
DWORD ExitCode;
CWinThread* thread;
int itemNr;
LV_ITEM item;
</code></pre>
<p>//CPP Datei</p>
<pre><code class="language-cpp">//Steht in der OnInitDialog = Threadstart
this-&gt;thread = AfxBeginThread(AnzeigeAktualisieren,this,THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if ( this-&gt;thread != NULL )
{
	this-&gt;thread-&gt;m_bAutoDelete = FALSE;
	this-&gt;thread-&gt;ResumeThread();
}
</code></pre>
<pre><code class="language-cpp">//Dies ist mein Thread
//Bitte kommentierte Zeile anschauen; dort geht er rein und kommt net mehr raus wenn ich auf abbruch gedrückt habe
UINT Auswahl::AnzeigeAktualisieren(void *pParam)
{
	Auswahl* lpouterThis = (Auswahl*) pParam;
	lpouterThis-&gt;threadstart = TRUE;
	lpouterThis-&gt;GetDlgItem(IDC_Abbruch)-&gt;EnableWindow(TRUE);

	lpouterThis-&gt;item.mask = LVIF_TEXT;
	//MySQL Ergebis holen
	while(Ergebnismenge != NULL)
	{
		for (int i = 0; i &lt; Spaltenanzahl; i++)
		{
			lpouterThis-&gt;item.iItem = 0;
			lpouterThis-&gt;item.pszText = row[i];
			lpouterThis-&gt;item.iSubItem = 0;
			//Hier Fehler
			lpouterThis-&gt;itemNr = lpouterThis-&gt;m_CBenutzer.InsertItem(&amp;lpouterThis-&gt;item);
 			for ( int y = 1; y &lt;= 5; y++ )
			{
				i++;
				lpouterThis-&gt;item.iItem = lpouterThis-&gt;itemNr;
				lpouterThis-&gt;item.iSubItem = y;
				lpouterThis-&gt;item.pszText = row[i];
                              lpouterThis-&gt;m_CBenutzer.SetItem(&amp;lpouterThis-&gt;item);  //Hier geht er rein und macht nich weiter, wenn abbruch = TRUE ist
			}
			if ( lpouterThis-&gt;abbruch )
				break;
		}
		if ( lpouterThis-&gt;abbruch )
			break;
	}
	//MySQL Ergebnis freigeben
	AfxEndThread(1,TRUE);
	return 0;
}
</code></pre>
<pre><code class="language-cpp">//Mein Abbruch Button
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);
		delete this-&gt;thread;
		if(ExitCode == 1)
		{
			MessageBox(&quot;Ok&quot;,NULL,MB_OK);
		}
	}
</code></pre>
<p>Soweit funktioniert ja auch alles wunderbar, bis ich meinen schönen Button &quot;Abbruch&quot; drücke.</p>
<p>Ich habe schon debugt ohne ende und das Ergebnis ist, dass er den Thread auch wunderbar weiterführt, when &quot;waitForSingleObjekt&quot; aufgerufen wird.</p>
<p>Aber sobald er an die Stelle kommt, wo er das Item setzten soll (SetItem), geht er da rein und kommt aus dieser Methode nicht wieder raus.</p>
<p>Wenn ich diese Zeile auskommentiere und auf &quot;Abbruch&quot; drücke, funktioniert alles wunderbar.</p>
<p>Wo hat er dort den Fehler? Ich habs auch schonmal mit DeleteItem o.ä. versucht. Leider das gleiche Ergebnis.</p>
<p>m_cBenuter ist vom Typ CListCtrl</p>
<p>Ich habe echt keine Ahnung, warum er das nicht macht. Das komische daran ist aber, dass das Problem, wie gesagt, erst auftritt, wenn ich &quot;Abbrch&quot; drücke. Vorher führt er die Methode ohne Probleme aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157246/problem-mit-thread-und-steuerelement</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 09:52:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157246.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Aug 2006 08:00:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Thread und Steuerelement on Thu, 24 Aug 2006 08:00:45 GMT]]></title><description><![CDATA[<p>Morgen,</p>
<p>ich habe mir einen Arbeitsthread erstellt, der ein Steuerelement mit Werten füllen soll.</p>
<p>//Header</p>
<pre><code class="language-cpp">static UINT AnzeigeAktualisieren(LPVOID pParam);
BOOL abbruch;
BOOL threadstart;
DWORD ExitCode;
CWinThread* thread;
int itemNr;
LV_ITEM item;
</code></pre>
<p>//CPP Datei</p>
<pre><code class="language-cpp">//Steht in der OnInitDialog = Threadstart
this-&gt;thread = AfxBeginThread(AnzeigeAktualisieren,this,THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if ( this-&gt;thread != NULL )
{
	this-&gt;thread-&gt;m_bAutoDelete = FALSE;
	this-&gt;thread-&gt;ResumeThread();
}
</code></pre>
<pre><code class="language-cpp">//Dies ist mein Thread
//Bitte kommentierte Zeile anschauen; dort geht er rein und kommt net mehr raus wenn ich auf abbruch gedrückt habe
UINT Auswahl::AnzeigeAktualisieren(void *pParam)
{
	Auswahl* lpouterThis = (Auswahl*) pParam;
	lpouterThis-&gt;threadstart = TRUE;
	lpouterThis-&gt;GetDlgItem(IDC_Abbruch)-&gt;EnableWindow(TRUE);

	lpouterThis-&gt;item.mask = LVIF_TEXT;
	//MySQL Ergebis holen
	while(Ergebnismenge != NULL)
	{
		for (int i = 0; i &lt; Spaltenanzahl; i++)
		{
			lpouterThis-&gt;item.iItem = 0;
			lpouterThis-&gt;item.pszText = row[i];
			lpouterThis-&gt;item.iSubItem = 0;
			//Hier Fehler
			lpouterThis-&gt;itemNr = lpouterThis-&gt;m_CBenutzer.InsertItem(&amp;lpouterThis-&gt;item);
 			for ( int y = 1; y &lt;= 5; y++ )
			{
				i++;
				lpouterThis-&gt;item.iItem = lpouterThis-&gt;itemNr;
				lpouterThis-&gt;item.iSubItem = y;
				lpouterThis-&gt;item.pszText = row[i];
                              lpouterThis-&gt;m_CBenutzer.SetItem(&amp;lpouterThis-&gt;item);  //Hier geht er rein und macht nich weiter, wenn abbruch = TRUE ist
			}
			if ( lpouterThis-&gt;abbruch )
				break;
		}
		if ( lpouterThis-&gt;abbruch )
			break;
	}
	//MySQL Ergebnis freigeben
	AfxEndThread(1,TRUE);
	return 0;
}
</code></pre>
<pre><code class="language-cpp">//Mein Abbruch Button
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);
		delete this-&gt;thread;
		if(ExitCode == 1)
		{
			MessageBox(&quot;Ok&quot;,NULL,MB_OK);
		}
	}
</code></pre>
<p>Soweit funktioniert ja auch alles wunderbar, bis ich meinen schönen Button &quot;Abbruch&quot; drücke.</p>
<p>Ich habe schon debugt ohne ende und das Ergebnis ist, dass er den Thread auch wunderbar weiterführt, when &quot;waitForSingleObjekt&quot; aufgerufen wird.</p>
<p>Aber sobald er an die Stelle kommt, wo er das Item setzten soll (SetItem), geht er da rein und kommt aus dieser Methode nicht wieder raus.</p>
<p>Wenn ich diese Zeile auskommentiere und auf &quot;Abbruch&quot; drücke, funktioniert alles wunderbar.</p>
<p>Wo hat er dort den Fehler? Ich habs auch schonmal mit DeleteItem o.ä. versucht. Leider das gleiche Ergebnis.</p>
<p>m_cBenuter ist vom Typ CListCtrl</p>
<p>Ich habe echt keine Ahnung, warum er das nicht macht. Das komische daran ist aber, dass das Problem, wie gesagt, erst auftritt, wenn ich &quot;Abbrch&quot; drücke. Vorher führt er die Methode ohne Probleme aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1123410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1123410</guid><dc:creator><![CDATA[MSS-Software]]></dc:creator><pubDate>Thu, 24 Aug 2006 08:00:45 GMT</pubDate></item></channel></rss>