<?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[Debug Assertion failed | afxcmn.inl line 132]]></title><description><![CDATA[<p>Hallo,<br />
in einem Thread werden Informationen in eine CListCtrl geschrieben.</p>
<p>Wenn ich das Programm beende, bevor der Thread durchgelaufen ist, kommt der oben genannte Fehler.</p>
<p>Hier lande ich beim Debuggen:<br />
{ ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, LVM_GETITEMCOUNT, 0, 0L); }</p>
<p>Kann es sein, dass das Beenden des Programms die CListCtrl löscht und der Thread noch weiter darauf zugreifen will? Wie kann ich das verhindern, wenn es denn so ist.</p>
<p>Grüße,<br />
Pedro</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170926/debug-assertion-failed-afxcmn-inl-line-132</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 10:56:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170926.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Jan 2007 03:38:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 03:38:08 GMT]]></title><description><![CDATA[<p>Hallo,<br />
in einem Thread werden Informationen in eine CListCtrl geschrieben.</p>
<p>Wenn ich das Programm beende, bevor der Thread durchgelaufen ist, kommt der oben genannte Fehler.</p>
<p>Hier lande ich beim Debuggen:<br />
{ ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, LVM_GETITEMCOUNT, 0, 0L); }</p>
<p>Kann es sein, dass das Beenden des Programms die CListCtrl löscht und der Thread noch weiter darauf zugreifen will? Wie kann ich das verhindern, wenn es denn so ist.</p>
<p>Grüße,<br />
Pedro</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213502</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 03:38:08 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 03:49:10 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich konnte das Problem deutlich eingrenzen.</p>
<p>Bisher hatte ich Folgendes:</p>
<pre><code class="language-cpp">BOOL CmyAPPDlg::DestroyWindow() 
{
  if(array_initiated)
  delete[] array1;
</code></pre>
<p>Wo kann ich den das delete sinnvoller / später platzieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213503</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 03:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 16:37:48 GMT]]></title><description><![CDATA[<p>Hat keiner eine Idee????</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213848</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 16:37:48 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 20:19:50 GMT]]></title><description><![CDATA[<p>Wie kann der Thread auf das CListCtrl zugreifen?</p>
<p>Ich vermute mal (ausdrücklich vermute ich!), dass Du einen Dialog mit einem CListCtrl hast, dort einen Thread erzeugst, der eine Ausgabe in das CListCtrl des Dialoges macht, und am Ende gibt es den ASSERT.</p>
<p>Soweit korrekt?</p>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213985</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 20:38:29 GMT]]></title><description><![CDATA[<p>Soweit richtig. Ich kann mir einfach nicht erklären, warum der Fehler nur auftritt, wenn man das Programm abbricht bevor der Thread durchgelaufen ist.</p>
<p>Hier etwas mehr Details:</p>
<p>Detected memory leaks!<br />
Dumping objects -&gt;<br />
strcore.cpp(118) : {116134} normal block at 0x00338068, 20 bytes long.<br />
Data: &lt; 4260&gt; 01 00 00 00 07 00 00 00 07 00 00 00 34 32 36 30<br />
strcore.cpp(118) : {116129} normal block at 0x00338010, 22 bytes long.<br />
Data: &lt; 31-J&gt; 01 00 00 00 09 00 00 00 09 00 00 00 33 31 2D 4A<br />
strcore.cpp(118) : {114763} normal block at 0x00339130, 141 bytes long.<br />
Data: &lt; / 31-J&gt; 01 00 00 00 2F 00 00 00 80 00 00 00 33 31 2D 4A<br />
strcore.cpp(118) : {109840} normal block at 0x00336288, 22 bytes long.<br />
Data: &lt; 17-J&gt; 01 00 00 00 09 00 00 00 09 00 00 00 31 37 2D 4A<br />
strcore.cpp(118) : {109837} normal block at 0x003360D8, 154 bytes long.<br />
Data: &lt; C:\D&gt; 01 00 00 00 8D 00 00 00 8D 00 00 00 43 3A 5C 44<br />
strcore.cpp(118) : {109835} normal block at 0x00334DB8, 56 bytes long.<br />
Data: &lt; + + Date&gt; 01 00 00 00 2B 00 00 00 2B 00 00 00 44 61 74 65<br />
strcore.cpp(118) : {109834} normal block at 0x003361B0, 154 bytes long.<br />
Data: &lt; C:\D&gt; 01 00 00 00 8D 00 00 00 8D 00 00 00 43 3A 5C 44<br />
strcore.cpp(118) : {109832} normal block at 0x00336080, 23 bytes long.<br />
Data: &lt; BAS_&gt; 01 00 00 00 0A 00 00 00 0A 00 00 00 42 41 53 5F<br />
strcore.cpp(118) : {109830} normal block at 0x00335F28, 269 bytes long.<br />
Data: &lt; BAS.&gt; 01 00 00 00 06 00 00 00 00 01 00 00 42 41 53 2E<br />
thrdcore.cpp(166) : {109825} client block at 0x00335BF0, subtype 0, 112 bytes long.<br />
a CWinThread object at $00335BF0, 112 bytes long<br />
thrdcore.cpp(166) : {326} client block at 0x00335290, subtype 0, 112 bytes long.<br />
a CWinThread object at $00335290, 112 bytes long<br />
Object dump complete.<br />
Thread 0x1004 wurde mit Code 2 (0x2) beendet.<br />
Thread 0xCE8 wurde mit Code 2 (0x2) beendet.<br />
Das Programm wurde mit Code 2 (0x2) beendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213997</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 20:42:15 GMT]]></title><description><![CDATA[<p>Wie wäre es mit einem kleinen Codeauszug, um die Zusammenhänge zwischen Dialog und Thread etwas darzustellen?</p>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214003</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 20:56:50 GMT]]></title><description><![CDATA[<p>Es ist mir schon wieder passiert, den Beitrag nicht ganz genau zu lesen.</p>
<pre><code class="language-cpp">..., warum der Fehler nur auftritt, wenn man das Programm abbricht bevor der Thread durchgelaufen ist.
</code></pre>
<p>Bei Schließen muss das Fenster, das den Thread erzeugt hat dafür Sorge tragen, dass der Thread beendet ist, bevor das Fenster geschlossen wird.</p>
<p>Irgendwo im Dialog passiert wohl ein <em><strong>CreateThread(..)</strong></em> oder ***AfxCreateThread(..)***. Wenn nun das Fenster (also der Dialog) geschlossen wird, bevor der Thread durchgelaufen ist, muss der Dialog dafür sorgen, dass der Thread beendet ist, bevor er selbst zerstört wird.</p>
<p>Wie das im Einzelfall geht, kommt immer auf die Anwendung an.</p>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214023</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:56:50 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 20:59:06 GMT]]></title><description><![CDATA[<p>In OnInitDlg steht:</p>
<pre><code class="language-cpp">// Laden der Kursdaten
if(stockDB_initiated)
stockdata_thread = ::AfxBeginThread(load_stockdata_masterthread, this);
</code></pre>
<pre><code class="language-cpp">UINT CHSIDepotmanagerDlg::load_stockdata_masterthread(LPVOID pParam)
	{
		CHSIDepotmanagerDlg* pDlg			= (CHSIDepotmanagerDlg*) pParam;
		pDlg-&gt;child_param.pointer			= pDlg;

		//	Vorbereitung des CProgress-Fensters
		int length = pDlg-&gt;m_stockCtrl.GetItemCount();
		pDlg-&gt;m_progress_dialog.init(0,length);
		pDlg-&gt;m_progress_dialog.show();
		pDlg-&gt;m_progress_dialog.setText(&quot;Laden der historischen Kursdaten ...&quot;);

		// Das Multithreading
		CWinThread* pThread;

		for(int g=0; g&lt;length; g++)
		{
		pDlg-&gt;child_param.index	= g;

			pThread = ::AfxBeginThread( load_stockdata_slavethread, &amp;pDlg-&gt;child_param, 0, 0, CREATE_SUSPENDED, NULL);
			pThread-&gt;ResumeThread();

			::WaitForSingleObject( pThread-&gt;m_hThread, INFINITE ); 
		}

	return true;
	}
</code></pre>
<pre><code class="language-cpp">UINT CHSIDepotmanagerDlg::load_stockdata_slavethread(LPVOID pParam)
	{
		thread_parameter*		myParam		= (thread_parameter*)		pParam;
		CHSIDepotmanagerDlg*	pDlg		= (CHSIDepotmanagerDlg*)	myParam-&gt;pointer;
		int						stock_index =							myParam-&gt;index;

		// Laden der historischen Kursdaten
		pDlg-&gt;load_stock_data(stock_index);

	return 0; 	
	}
</code></pre>
<pre><code class="language-cpp">BOOL CHSIDepotmanagerDlg::load_stock_data(int stock_index)
	{
		bool abbruch, start_set=false;
		CString		stock_symbol, filename, fullpath, strLesePuffer, error, header, substring, start_date, end_date;
		CStdioFile	DateiLesen;

		stock_symbol	=	m_stockCtrl.GetItemText(stock_index,0);
		filename		=	stock_symbol;	filename.Replace(&quot;.&quot;,&quot;_&quot;);	filename += &quot;.csv&quot;;
		fullpath		=	path_stock_data + &quot;\\&quot; + filename;
		header			=	&quot;Date,Open,High,Low,Close,Volume,Adj. Close*&quot;;

		int	pos, last_pos, length, satz_ident;

		//	Einlesen der Kursdaten
		if (DateiLesen.Open(fullpath, CFile::modeRead))
		{
		  while(DateiLesen.ReadString(strLesePuffer))
		  {
			strLesePuffer.TrimLeft();
			strLesePuffer.TrimRight();

			if(strLesePuffer.Find(header,0)==-1)
			{
				pos = 0; last_pos = 0; satz_ident=0;
				abbruch = false;

				while(true)
				{
					pos			= strLesePuffer.Find(&quot;,&quot;,last_pos);

					if(pos==-1){	length = strLesePuffer.GetLength()-last_pos; abbruch = true;
					}else			length = pos-last_pos;

					substring	= strLesePuffer.Mid(last_pos,length);

					if(satz_ident==0){
						if(!start_set)
						{
							start_set	=true;
							start_date	=substring;
						}
							end_date	=substring;

//							stockDB[stock_index].InsertItem(stockDB[stock_index].GetItemCount(),substring);

}			
//					}else	stockDB[stock_index].SetItemText(stockDB[stock_index].GetItemCount()-1,satz_ident,substring);

					last_pos	= pos+1;
					satz_ident += 1;

					if(abbruch)	
					break;
				}
			}

		  }
		}else
		{
			error.Format(&quot;Es ist eine Fehler beim Lesen der Datei %s aufgetreten.&quot;,filename);
			MessageBox(error,&quot;Lesefehler&quot;,MB_ICONINFORMATION);
		}

		m_progress_dialog.m_ctlProgress.SetPos(m_progress_dialog.m_ctlProgress.GetPos()+1);

	//	if(m_progress_dialog.m_ctlProgress.GetPos()==m_stockCtrl.GetItemCount())
	//	m_progress_dialog.hide();

		m_stockCtrl.SetItemText(stock_index,1,start_date);
		m_stockCtrl.SetItemText(stock_index,2,end_date);

	return true;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1214030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214030</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:59:06 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 21:01:04 GMT]]></title><description><![CDATA[<p>Wie du siehst benutze ich AfxCreateThread mehr als einmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214033</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 21:01:04 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 21:15:38 GMT]]></title><description><![CDATA[<p>Wo genau passiert</p>
<pre><code class="language-cpp">// Laden der Kursdaten 
if(stockDB_initiated) 
stockdata_thread = ::AfxBeginThread(load_stockdata_masterthread, this);
</code></pre>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214047</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Sun, 21 Jan 2007 21:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 21:17:52 GMT]]></title><description><![CDATA[<p>Hier:<br />
BOOL CHSIDepotmanagerDlg::OnInitDialog()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214048</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 21:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 21:37:36 GMT]]></title><description><![CDATA[<p>Ok, dann musst du in der CHSIDepotmanagerDlg::OnDestroy() (zu überladen im Wizard) vor aufruf der CDialog::OnDestroy() dafür sorgen, dass Dein erster Thread beendet wird. Dieser erste Thread muss natürlich vor &quot;seinem Ende&quot; dafür Sorge tragen, dass alle von ihm erzeugten Threads beendet sind, etc.</p>
<p>Wie das geht, dafür gibt es mehrere Möglichkeiten. Eine für Deinen Dialog ist z.B.</p>
<pre><code class="language-cpp">...
DWORD dwStatus;

// check current state 
VERIFY(::GetExitCodeThread(stockdata_thread-&gt;m_hThread, &amp;dwStatus));

// wait until the thread has terminated
while( dwStatus == STILL_ACTIVE &amp;&amp; stockdata_thread-&gt;m_hThread != NULL ) 
{
  // check, if the thread is running ...
  ::GetExitCodeThread(stockdata_thread-&gt;m_hThread, &amp;dwStatus );
};
</code></pre>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214060</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Sun, 21 Jan 2007 21:37:36 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 21:53:13 GMT]]></title><description><![CDATA[<p>Mh, mal geht es und mal nicht.</p>
<pre><code class="language-cpp">void CHSIDepotmanagerDlg::OnDestroy() 
{
	CDialog::OnDestroy();

	DWORD dwStatus;

	// check current state
	VERIFY(::GetExitCodeThread(stockdata_thread-&gt;m_hThread, &amp;dwStatus));

	// wait until the thread has terminated
	while( dwStatus == STILL_ACTIVE &amp;&amp; stockdata_thread-&gt;m_hThread != NULL )
	{
	  // check, if the thread is running ...
	  ::GetExitCodeThread(stockdata_thread-&gt;m_hThread, &amp;dwStatus );
	}

}
</code></pre>
<p>Wenn ein Feher kommt, dan kommt:<br />
Debug Assertion Failed | afxcmn2.inl | Line: 288</p>
<p>_AFXCMN_INLINE int CProgressCtrl::SetPos(int nPos)<br />
{ ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, PBM_SETPOS, nPos, 0L); }</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214067</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 21:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 22:15:02 GMT]]></title><description><![CDATA[<p>Keine Änderung am Quellcode.<br />
Ein weiterer Fehler in Zeile:</p>
<p>VERIFY(::GetExitCodeThread(stockdata_thread-&gt;m_hThread, &amp;dwStatus));</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214082</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 22:15:02 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Sun, 21 Jan 2007 22:17:35 GMT]]></title><description><![CDATA[<p>Der Fehler kommt, wenn man erst alles durchlaufen lässt und dann das Programm beendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214083</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Sun, 21 Jan 2007 22:17:35 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Mon, 22 Jan 2007 19:36:15 GMT]]></title><description><![CDATA[<p>Das habe ich mir vorhin auch überlegt (bovor ich den Rechner eingeschalten habe).<br />
Ich vergaß, dass da noch zwei &quot;Kleinigkeiten&quot; zu beachten sind <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>Zunächst ist mir jetzt aber noch aufgefallen, dass als zweiter Parameter an AfxBeginThread(..) der <em><strong>this</strong></em>-Pointer des Dialoges übergeben wird. Der wird dann auch einfach in der Thread-Funktion auf die CDialog-Klasse gecastet. Dass das so ins Auge gehen kann, habe ich neulich schon mal in einem anderen Zusammenhang erläutert. CWnd ist nicht Thread-Save (siehe MFC Dokumentation)! Man übergebe <em><strong>m_hWnd</strong></em> an den Thread, und benutzt z.b. <em><strong>CMyDialog *pDlg = dynamic_cast&lt;CMyDialog *&gt;(CWnd::FromHandle((HWND)pParam) )</strong></em> in der Thread-Funktion. Ist in jedem Fall sicherer als den CWnd Zeiger zu übergeben, das geht oft (meist in der _DEBUG), manchmal aber auch nicht (und dann sucht man sich schon mal einen Wolf).</p>
<p>Nun zum Eigentlichen:</p>
<pre><code class="language-cpp">// Wie oben bemerkt, m_hWnd übergeben, dann die Besonderheit, der letzte Parameter CREATE_SUSPENDED.
// Das bewirkt, dass der Thread nicht sofort &quot;los läuft&quot;.
stockdata_thread = ::AfxBeginThread(load_stockdata_masterthread, m_hWnd, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED ); 
if(stockdata_thread)
{
  // nun sicherstellen, dass die CWinThread Instanz sich nach Ende nicht selbst zerstört
  stockdata_thread-&gt;m_bAutoDelete = FALSE;
  // und den Thread laufen lassen
  stockdata_thread-&gt;ResumeThread();
}
</code></pre>
<p>Dann in der OnDestroy:</p>
<pre><code class="language-cpp">void CHSIDepotmanagerDlg::OnDestroy() 
{
    DWORD dwStatus;

    // check current state
    VERIFY(::GetExitCodeThread(stockdata_thread-&gt;m_hThread, &amp;dwStatus));

    // wait until the thread has terminated
    while( dwStatus == STILL_ACTIVE &amp;&amp; stockdata_thread-&gt;m_hThread != NULL )
    {
      // check, if the thread is running ...
      ::GetExitCodeThread(stockdata_thread-&gt;m_hThread, &amp;dwStatus );
    }

    // nun noch die Thread Instanz löschen 
    delete stockdata_thread;

    // Erst die Basisklasse Aufrufen, wenn der Thread beendet ist,
    // weil der Thread das Dialogfenster braucht!
    CDialog::OnDestroy();
}
</code></pre>
<p>So sollte es eigentlich gehen.</p>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214750</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Mon, 22 Jan 2007 19:36:15 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Tue, 23 Jan 2007 22:25:39 GMT]]></title><description><![CDATA[<p>Vielen Dank, dass du dran bleibst Gio aber es scheint noch ein kleiner Fehler drin zu sein.</p>
<p>CHSIDepotmanagerDlg *pDlg = dynamic_cast&lt;CHSIDepotmanagerDlg *&gt;(CWnd::FromHandle((HWND)pParam) );</p>
<p>führt zu</p>
<p>warning C4541: 'dynamic_cast' fuer polymorphen Typ 'class CWnd' mit /GR- verwendet; unvorhersehbares Verhalten moeglich</p>
<p>Fällt dir dazu was ein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215630</guid><dc:creator><![CDATA[Müder_Pedro]]></dc:creator><pubDate>Tue, 23 Jan 2007 22:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion failed | afxcmn.inl line 132 on Tue, 23 Jan 2007 23:53:03 GMT]]></title><description><![CDATA[<p>Liegt an den Compiler Optionen. <em>dynamic_cast</em> benötigt RTTI.</p>
<p>=&gt; unter den Projekteinstellungen &quot;C/C++&quot; unter der Kategorie &quot;C++ Language&quot; den Schalter &quot;Enable Run-Time Type Information (RTTI)&quot; anschalten. Entspricht dem CL Kommandozeilenparametert &quot;/GR&quot;.</p>
<p>Wenn du das nicht willst, dann statt</p>
<pre><code class="language-cpp">CHSIDepotmanagerDlg *pDlg =  dynamic_cast&lt;CHSIDepotmanagerDlg*&gt;(CWnd::FromHandle((HWND)pParam) );
</code></pre>
<p>einfach &quot;hart&quot; casten:</p>
<pre><code class="language-cpp">CHSIDepotmanagerDlg *pDlg =  (CHSIDepotmanagerDlg *)(CWnd::FromHandle((HWND)pParam) );
</code></pre>
<p>Geht auch. Aber mit RTTI und nachfolgender NULL Pointer-Abfrage habe ich in meiner Applikation gute Erfahrungen gemacht. Das liegt am Design meiner Applikation, und daher der Vorschlag.</p>
<p>Gruss, Gio</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215652</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Tue, 23 Jan 2007 23:53:03 GMT</pubDate></item></channel></rss>