<?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[Zugriff aus Thread auf Doc]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich meinem Workerthread habe ich ein Objekt erstellt, welches Daten berechnet und dann in die Doc-Klasse der Hauptanwendung schreiben soll. Doch wenn ich mir den Zeiger auf das Document holen will, bekomme ich einen Fehler, mit dem ich nichts anfangen kann.</p>
<p>Codeauszug:</p>
<pre><code class="language-cpp">//Meine Thread-Funktion
UINT CFolderSyncView::ScanThread(LPVOID pParam)
{
	CScanDialog* pScanDlg = static_cast&lt;CScanDialog*&gt;(pParam);
	CFileScanner Scanner(pScanDlg);
	Scanner.go();
	return 0;
}

//Konstruktor von CFileScanner
CFileScanner::CFileScanner(CScanDialog* pScanDlg)
{
	m_pScanDlg = pScanDlg;
	m_pDoc = static_cast&lt;CFolderSyncDoc*&gt;(static_cast&lt;CFolderSyncView*&gt;(m_pScanDlg-&gt;GetParent())-&gt;GetDocument());
// ==&gt; Crash
</code></pre>
<p>Als Fehler bekomme ich angezeigt:</p>
<pre><code class="language-cpp">BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
{
	ENSURE(this != NULL);
	// it better be in valid memory, at least for CObject size
	ASSERT(AfxIsValidAddress(this, sizeof(CObject)));

	// simple SI case
	CRuntimeClass* pClassThis = GetRuntimeClass(); //Darauf zeigt er

	ENSURE(pClassThis);
	return pClassThis-&gt;IsDerivedFrom(pClass);
}
</code></pre>
<p>Was hat das Ganze nun zu bedeuten? Kann ich aus meinem Thread nicht auf das Document zugreifen? Der Zugriff auf den Dialog funktioniert...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147840/zugriff-aus-thread-auf-doc</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 12:28:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147840.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 May 2006 15:41:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriff aus Thread auf Doc on Sat, 20 May 2006 15:41:29 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich meinem Workerthread habe ich ein Objekt erstellt, welches Daten berechnet und dann in die Doc-Klasse der Hauptanwendung schreiben soll. Doch wenn ich mir den Zeiger auf das Document holen will, bekomme ich einen Fehler, mit dem ich nichts anfangen kann.</p>
<p>Codeauszug:</p>
<pre><code class="language-cpp">//Meine Thread-Funktion
UINT CFolderSyncView::ScanThread(LPVOID pParam)
{
	CScanDialog* pScanDlg = static_cast&lt;CScanDialog*&gt;(pParam);
	CFileScanner Scanner(pScanDlg);
	Scanner.go();
	return 0;
}

//Konstruktor von CFileScanner
CFileScanner::CFileScanner(CScanDialog* pScanDlg)
{
	m_pScanDlg = pScanDlg;
	m_pDoc = static_cast&lt;CFolderSyncDoc*&gt;(static_cast&lt;CFolderSyncView*&gt;(m_pScanDlg-&gt;GetParent())-&gt;GetDocument());
// ==&gt; Crash
</code></pre>
<p>Als Fehler bekomme ich angezeigt:</p>
<pre><code class="language-cpp">BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
{
	ENSURE(this != NULL);
	// it better be in valid memory, at least for CObject size
	ASSERT(AfxIsValidAddress(this, sizeof(CObject)));

	// simple SI case
	CRuntimeClass* pClassThis = GetRuntimeClass(); //Darauf zeigt er

	ENSURE(pClassThis);
	return pClassThis-&gt;IsDerivedFrom(pClass);
}
</code></pre>
<p>Was hat das Ganze nun zu bedeuten? Kann ich aus meinem Thread nicht auf das Document zugreifen? Der Zugriff auf den Dialog funktioniert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1061684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1061684</guid><dc:creator><![CDATA[Brainiac]]></dc:creator><pubDate>Sat, 20 May 2006 15:41:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff aus Thread auf Doc on Sat, 20 May 2006 16:03:54 GMT]]></title><description><![CDATA[<p>Das ist wohl kaum der Fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Aber was hälst du von:</p>
<pre><code class="language-cpp">(CFolderSyncDoc*((CMainFrame*)AfxGetMainWnd())-&gt;GetActiveView())-&gt;GetDocument()
</code></pre>
<p>?! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1061698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1061698</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 20 May 2006 16:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff aus Thread auf Doc on Sun, 21 May 2006 08:22:09 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Das ist wohl kaum der Fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Was meinst du damit? <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>
<p>Dein Vorschlag hat leider auch nicht funktioniert, ich glaube man kann nur aus dem Hauptthread AfxGetApp() oder AfxGetMainWnd() aufrufen.</p>
<p>Ich hab jetzt einfach einen Zeiger auf das Document in m_pScanDlg gespeichert, mit dem klappt der Zugriff auf das Document. <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>Allerdings bin ich mir jetzt nicht ganz sicher: Darf ich das so machen? Oder kann ich jetzt irgendwie Zugriffsverletztungen o.ä. auslösen?</p>
<p>Gruß Brainiac</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1061934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1061934</guid><dc:creator><![CDATA[Brainiac]]></dc:creator><pubDate>Sun, 21 May 2006 08:22:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff aus Thread auf Doc on Sun, 21 May 2006 15:42:01 GMT]]></title><description><![CDATA[<p>Selbst wen Du einen View als Parent angibst, das eigentliche Parent wird immer ein entsprechendes Frame Window und niemals ein Fenster mit einem WS_CHILD Stil!</p>
<p>Wenn Du schon einen Dialog hast, dann kannst Du doch dem Dialog den entsprechenden Zeiger auf das Dokument mitgeben und eben mit AfxGetMainWnd ermitteln, wie (D)Evil es vorschlug.<br />
Warum muss Dein Thread wissen wie er an ein Dokument kommt? Warum muss Dein Thread auch noch wissen das es da ein Frame Window und einen View gibt? Übergib direkt den Zeiger.</p>
<p>AfxGetApp darf übrigens immer aufgerufen werden, aus jedem Thread. Mit AfxGetMainWnd hast Du recht, dass kann (muss aber nicht) auf ein Fenster des eigenen Workerthreads verweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1062189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1062189</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 21 May 2006 15:42:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff aus Thread auf Doc on Sun, 21 May 2006 17:11:02 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Wenn Du schon einen Dialog hast, dann kannst Du doch dem Dialog den entsprechenden Zeiger auf das Dokument mitgeben und eben mit AfxGetMainWnd ermitteln, wie (D)Evil es vorschlug.<br />
Warum muss Dein Thread wissen wie er an ein Dokument kommt? Warum muss Dein Thread auch noch wissen das es da ein Frame Window und einen View gibt? Übergib direkt den Zeiger.</p>
</blockquote>
<p>So hab ichs ja nun gemacht, und es funktioniert. Ich war mir nur nicht sicher, ob man das darf und ob das sicher ist, wenn es schon nicht klappt, dass der Thread sich selbst einen Zeiger auf das Document holt.</p>
<p>Aber aus deiner Antwort entnehme ich, dass das eine legale Methode ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Danke für die Antworten!</p>
<p>Gruß Brainiac</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1062242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1062242</guid><dc:creator><![CDATA[Brainiac]]></dc:creator><pubDate>Sun, 21 May 2006 17:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff aus Thread auf Doc on Sun, 21 May 2006 17:46:34 GMT]]></title><description><![CDATA[<p>Ich sehe es vom OOP Design sogar als die einzig richtige Methode an.<br />
Warum solltest Du Objekte bemühen, die Du zur Lösung des Problems gar nicht brauchst!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1062274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1062274</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 21 May 2006 17:46:34 GMT</pubDate></item></channel></rss>