<?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[Thread]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab folgendes Problem.<br />
Ich möchte gerne bei einer MDI-Anwendung, wenn bereits ein Window geoefnet ist, in der Threadfunktion in den Device Context zeichnen. Die Threadfunktion ist eine static Funktion der Documentenklasse. In der Threadfunktion verwende ich folgenden Code:</p>
<p>1 UINT CMO4Doc::LiveThreadProc( LPVOID Param )<br />
2 {</p>
<p>3 CMO4App* pApp = (CNMO4App*) AfxGetApp();<br />
4 CFrameWnd* pChild = ((CMDIFrameWnd*) 5(pApp-&gt;m_pMainWnd))-&gt;GetActiveFrame();<br />
6 CMO4View* pView = (CMO4View*) pChild-&gt;GetActiveView();<br />
7 CDC <em>c = pView-&gt;GetDC( );<br />
8 CMO4Doc</em> pDoc = pView-&gt;GetDocument();<br />
9}</p>
<p>Dabei stürzt das Program in der Zeile 4 ab.</p>
<p>Wenn ich in der Funktion in den ich den Thread aufrufe die Zeile 3 und 4 hinzufüge, das heißt das ChildFenster erzeuge und der Threadfunktion als Parameter übergebe, und in der Threadfunktion folgenden Code ausführe:</p>
<p>1 UINT CMO4Doc::LiveThreadProc( LPVOID Param )<br />
2 {</p>
<p>3 CFrameWnd* pChild = (CFrameWnd*)Param;<br />
4 CMO4View* pView = (CMO4View*) pChild-&gt;GetActiveView();<br />
5 CDC <em>c = pView-&gt;GetDC( );<br />
6 CMO4Doc</em> pDoc = pView-&gt;GetDocument();<br />
7 pView-&gt;OnDraw(c);<br />
8}</p>
<p>Kann ich erreichen, daß in die OnDrawMethode gesprungen wird. Allerdings stürzt das Programm innerhalb der Funktion dann ab.<br />
Ich glaube das liegt an dem DC den ich an die OnDraw Merhode übergebe.Dieser wird glaube ich nicht mit dem richtigen Window assoziert.</p>
<p>Wie kann ich einen korrekten DC in der Threadfunktion auf das geladene Window bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147198/thread</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 03:51:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147198.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 May 2006 08:31:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread on Mon, 15 May 2006 08:31:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab folgendes Problem.<br />
Ich möchte gerne bei einer MDI-Anwendung, wenn bereits ein Window geoefnet ist, in der Threadfunktion in den Device Context zeichnen. Die Threadfunktion ist eine static Funktion der Documentenklasse. In der Threadfunktion verwende ich folgenden Code:</p>
<p>1 UINT CMO4Doc::LiveThreadProc( LPVOID Param )<br />
2 {</p>
<p>3 CMO4App* pApp = (CNMO4App*) AfxGetApp();<br />
4 CFrameWnd* pChild = ((CMDIFrameWnd*) 5(pApp-&gt;m_pMainWnd))-&gt;GetActiveFrame();<br />
6 CMO4View* pView = (CMO4View*) pChild-&gt;GetActiveView();<br />
7 CDC <em>c = pView-&gt;GetDC( );<br />
8 CMO4Doc</em> pDoc = pView-&gt;GetDocument();<br />
9}</p>
<p>Dabei stürzt das Program in der Zeile 4 ab.</p>
<p>Wenn ich in der Funktion in den ich den Thread aufrufe die Zeile 3 und 4 hinzufüge, das heißt das ChildFenster erzeuge und der Threadfunktion als Parameter übergebe, und in der Threadfunktion folgenden Code ausführe:</p>
<p>1 UINT CMO4Doc::LiveThreadProc( LPVOID Param )<br />
2 {</p>
<p>3 CFrameWnd* pChild = (CFrameWnd*)Param;<br />
4 CMO4View* pView = (CMO4View*) pChild-&gt;GetActiveView();<br />
5 CDC <em>c = pView-&gt;GetDC( );<br />
6 CMO4Doc</em> pDoc = pView-&gt;GetDocument();<br />
7 pView-&gt;OnDraw(c);<br />
8}</p>
<p>Kann ich erreichen, daß in die OnDrawMethode gesprungen wird. Allerdings stürzt das Programm innerhalb der Funktion dann ab.<br />
Ich glaube das liegt an dem DC den ich an die OnDraw Merhode übergebe.Dieser wird glaube ich nicht mit dem richtigen Window assoziert.</p>
<p>Wie kann ich einen korrekten DC in der Threadfunktion auf das geladene Window bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057928</guid><dc:creator><![CDATA[guzza]]></dc:creator><pubDate>Mon, 15 May 2006 08:31:09 GMT</pubDate></item><item><title><![CDATA[Reply to Thread on Mon, 15 May 2006 10:29:13 GMT]]></title><description><![CDATA[<p>Das Problem ist IMHO, das AfxGetApp nur funtioniert wenn der aufrufende Thread auch die App ist. Versuch doch mal über pParam den Document-Zeiger zu übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1058000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058000</guid><dc:creator><![CDATA[connan]]></dc:creator><pubDate>Mon, 15 May 2006 10:29:13 GMT</pubDate></item><item><title><![CDATA[Reply to Thread on Mon, 15 May 2006 11:05:06 GMT]]></title><description><![CDATA[<p>Du kannst keine CWNd Objekte in einem anderen Thread verwenden.<br />
Das Problem ist das je Thread eine Map geführt wird, in der die Window Handles Deinem CWnd Objekt zugeordnet werden. Das ist erstmal kein Problem, aber es aber gibt einen Haufen von Funktionen in CWnd die vor der Ausführung prüfen, ob das Handle auch in der Map ist.<br />
Rufst Du also diese Funktion aus einem Thread auf, der das Fenster nicht erzeugt hat, fliegt Dir die Funktion mit einem ASSERT um die Ohren.</p>
<p>Weiterhin ist Dein Zugriff aus dem fremden Thread auf alle Deine Dokumente und Views gewagt. Bist Du sicher, dass die Daten auch threadsicher verwaltet sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1058019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058019</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 15 May 2006 11:05:06 GMT</pubDate></item></channel></rss>