<?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[Struktur als Parameter an Thread übergeben]]></title><description><![CDATA[<p>Hallo nochmal,<br />
ich hätte da eine Frage über das Übergeben von Parametern an Threads.<br />
Ich habe bisher nur versucht einzelne Parameter an ein Thread zu übbergeben, wobei man es erst nach LPVOID casten musste und im Thread wieder in den gewünschten Typ.</p>
<p>Jetzt brauche ich aber 2 Parameter und habe mir dafür eine Struktur angelegt und beide Variablen der Struktur ausgefüllt.</p>
<p>Wenn ich es nun nach LPVOID caste und im Thread zurück gibt es noch keine Fehler, jedoch wenn ich auf eins der beiden Variablen zugreife krieg ein Fehler .</p>
<p>Jetzt hab ich schon vieles vversucht ,bin aber noch nicht auf eine Lösung gekommen, vielleicht kann mir da einer helfen.</p>
<p>Hier ist der Codeabschnitt:</p>
<pre><code class="language-cpp">DWORD WINAPI G6_Engine::MeshLoader(LPVOID param)
{
	MeshLoaderParam* temp = reinterpret_cast&lt;MeshLoaderParam*&gt;(param);

	std::string temp_name(temp-&gt;path);

	MessageBoxA(0,temp_name.c_str(),0,0);

	return 0;
}

bool G6_Engine::GFileManager::Load(GMesh* mesh, std::string path)
{

	HANDLE Temp_h = NULL;  //Temp Handle für Thread
	DWORD  Temp_d = NULL;  //Temp Dword für Thread
	MeshLoaderParam Temp_param;

	Temp_param.mesh = mesh;
	Temp_param.path = path;

	Temp_h = CreateThread(NULL, 0 ,(LPTHREAD_START_ROUTINE) MeshLoader,reinterpret_cast&lt;LPVOID&gt;(&amp;Temp_param), NULL, NULL);
	GetExitCodeThread(Temp_h, &amp;Temp_d);  //In dem Dword wird der Zustand gespeichert

	_ThreadMap.insert( std::make_pair&lt;HANDLE , DWORD&gt;(Temp_h,Temp_d));  //Setze den Thread in die map ein

	return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/307089/struktur-als-parameter-an-thread-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 18:04:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307089.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Aug 2012 10:23:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 10:23:57 GMT]]></title><description><![CDATA[<p>Hallo nochmal,<br />
ich hätte da eine Frage über das Übergeben von Parametern an Threads.<br />
Ich habe bisher nur versucht einzelne Parameter an ein Thread zu übbergeben, wobei man es erst nach LPVOID casten musste und im Thread wieder in den gewünschten Typ.</p>
<p>Jetzt brauche ich aber 2 Parameter und habe mir dafür eine Struktur angelegt und beide Variablen der Struktur ausgefüllt.</p>
<p>Wenn ich es nun nach LPVOID caste und im Thread zurück gibt es noch keine Fehler, jedoch wenn ich auf eins der beiden Variablen zugreife krieg ein Fehler .</p>
<p>Jetzt hab ich schon vieles vversucht ,bin aber noch nicht auf eine Lösung gekommen, vielleicht kann mir da einer helfen.</p>
<p>Hier ist der Codeabschnitt:</p>
<pre><code class="language-cpp">DWORD WINAPI G6_Engine::MeshLoader(LPVOID param)
{
	MeshLoaderParam* temp = reinterpret_cast&lt;MeshLoaderParam*&gt;(param);

	std::string temp_name(temp-&gt;path);

	MessageBoxA(0,temp_name.c_str(),0,0);

	return 0;
}

bool G6_Engine::GFileManager::Load(GMesh* mesh, std::string path)
{

	HANDLE Temp_h = NULL;  //Temp Handle für Thread
	DWORD  Temp_d = NULL;  //Temp Dword für Thread
	MeshLoaderParam Temp_param;

	Temp_param.mesh = mesh;
	Temp_param.path = path;

	Temp_h = CreateThread(NULL, 0 ,(LPTHREAD_START_ROUTINE) MeshLoader,reinterpret_cast&lt;LPVOID&gt;(&amp;Temp_param), NULL, NULL);
	GetExitCodeThread(Temp_h, &amp;Temp_d);  //In dem Dword wird der Zustand gespeichert

	_ThreadMap.insert( std::make_pair&lt;HANDLE , DWORD&gt;(Temp_h,Temp_d));  //Setze den Thread in die map ein

	return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2242377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242377</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 10:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 10:33:39 GMT]]></title><description><![CDATA[<p>Hmm also so bekomme ich schonmal keine Fehlermeldung, jedoch hat die Ausgabe keinen Inhalt:</p>
<pre><code class="language-cpp">MeshLoaderParam &amp;c = reinterpret_cast&lt;MeshLoaderParam&amp;&gt;(param);

	std::string temp_name(c.path);

	MessageBoxA(0,temp_name.c_str(),0,0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2242381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242381</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 10:33:39 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 10:45:07 GMT]]></title><description><![CDATA[<p>Ein cast von void * nach referenz wird nicht funktionieren.<br />
versuchs so</p>
<pre><code>MeshLoaderParam *c = reinterpret_cast&lt;MeshLoaderParam*&gt;(param);

    std::string temp_name(c-&gt;path);

    MessageBoxA(0,temp_name.c_str(),0,0);
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242393</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 16 Aug 2012 10:45:07 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 10:51:33 GMT]]></title><description><![CDATA[<p>Du übergibst einen Zeiger auf ein lokales Element.<br />
Wenn <code>G6_Engine::GFileManager::Load()</code> endet bevor <code>G6_Engine::MeshLoader()</code> damit fertig ist wird <code>param</code> ungültig...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242398</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 16 Aug 2012 10:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 10:57:40 GMT]]></title><description><![CDATA[<p>Ja der Befehl G6_Engine::GFileManager::Load() soll ja nur einen Thread starten und seinen HANDLE bzw. den DWORD zur Überprüfung des States in eine map speichern.Und die Threadfunktion selbst parst und lädt dann ein Mesh, sodass Load() natürlich vor dem Thread fertig ist.</p>
<p>Was würdet ihr vorschlagen ?? Ich kann alle eingehenden parameter zum laden eines Meshs nicht in der classe speichern (könnte ich schon wäre aber sehr schlecht)... ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242401</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 10:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:00:34 GMT]]></title><description><![CDATA[<p>Bob Wolfskin schrieb:</p>
<blockquote>
<p>Was würdet ihr vorschlagen ??</p>
</blockquote>
<p>Mit <code>new</code> (evtl. Smartpointer) auf dem Heap anlegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242403</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:00:34 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:04:01 GMT]]></title><description><![CDATA[<p>Und wie genau stellst du dir das vor (mit dem Heap mein ich) ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242406</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:16:08 GMT]]></title><description><![CDATA[<p>Meinst du irgendwie sowas:</p>
<pre><code class="language-cpp">MeshLoaderParam *m = new MeshLoaderParam;
     m-&gt;mesh = mesh;
.....
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2242412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242412</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:16:08 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:25:25 GMT]]></title><description><![CDATA[<p>Yeahh ich habs hinbekommen.Für alle mit dem gleichen Problem:</p>
<pre><code class="language-cpp">DWORD WINAPI G6_Engine::MeshLoader(LPVOID param)
{

	MeshLoaderParam *c = reinterpret_cast&lt;MeshLoaderParam*&gt;(param);

	std::string temp_name(c-&gt;path);

	MessageBoxA(0,temp_name.c_str(),0,0);

	return 0;
}

bool G6_Engine::GFileManager::Load(GMesh* mesh, std::string path)
{

	HANDLE Temp_h = NULL;  //Temp Handle für Thread
	DWORD  Temp_d = NULL;  //Temp Dword für Thread
	MeshLoaderParam* a = (MeshLoaderParam*) malloc(sizeof(a));
	new (a) MeshLoaderParam();

	a-&gt;mesh = mesh;
	a-&gt;path = path;

	Temp_h = CreateThread(NULL, 0 ,(LPTHREAD_START_ROUTINE) MeshLoader,reinterpret_cast&lt;LPVOID&gt;(a), NULL, NULL);
	GetExitCodeThread(Temp_h, &amp;Temp_d);  //In dem Dword wird der Zustand gespeichert

	_ThreadMap.insert( std::make_pair&lt;HANDLE , DWORD&gt;(Temp_h,Temp_d));  //Setze den Thread in die map ein

	return false;
}
</code></pre>
<p>Man erstellt erstmal einen Speicherbereich für die Struktur und dann erstellt man mit new eine Instanz davon.Jetzt kann man das ganze ausfüllen und mit reinterpret_cast <a href="http://casten.In" rel="nofollow">casten.In</a> dem Thread einfach zurück und man hats</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242417</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:27:58 GMT]]></title><description><![CDATA[<p>Bob Wolfskin schrieb:</p>
<blockquote>
<p>Meinst du irgendwie sowas:</p>
<pre><code class="language-cpp">MeshLoaderParam *m = new MeshLoaderParam;
     m-&gt;mesh = mesh;
.....
</code></pre>
</blockquote>
<p>Zum Beispiel. ( <code>delete</code> nicht vergessen!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242420</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:32:27 GMT]]></title><description><![CDATA[<p>Fehlt nur noch eines</p>
<pre><code>DWORD WINAPI G6_Engine::MeshLoader(LPVOID param)
{

    MeshLoaderParam *c = reinterpret_cast&lt;MeshLoaderParam*&gt;(param);

    std::string temp_name(c-&gt;path);

    MessageBoxA(0,temp_name.c_str(),0,0);

    [b]delete c;[/b] // kann in der aufrufenden funktion nicht freigegeben werden

    return 0;
}
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242424</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:32:27 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:36:05 GMT]]></title><description><![CDATA[<p>Bob Wolfskin schrieb:</p>
<blockquote>
<pre><code class="language-cpp">MeshLoaderParam* a = (MeshLoaderParam*) malloc(sizeof(a));
new (a) MeshLoaderParam();
</code></pre>
</blockquote>
<p><code>malloc(sizeof(a))</code> und placement new <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>
<p>Du reservierst lediglich Platz für einen Zeiger.</p>
<p>Mach's so, wie Du selbst eben vorschlugst.<br />
<code>MeshLoaderParam* a = new MeshLoaderParam;</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242428</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:39:30 GMT]]></title><description><![CDATA[<blockquote>
<p>malloc(sizeof(a)) und placement new</p>
<p>Du reservierst lediglich Platz für einen Zeiger.</p>
</blockquote>
<p>Ja so ist das und es funktioniert einwandfrei <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="😉"
    /><br />
Der Fehler war ja, dass kein Speicherplatz freigegeben wurde und deshalb ein Fehler beim Aufruf die Folge war</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242431</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:45:32 GMT]]></title><description><![CDATA[<p>Bob Wolfskin schrieb:</p>
<blockquote>
<p>Ja so ist das und es funktioniert einwandfrei <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>Das denkst Du nur.<br />
<code>MeshLoaderParam</code> ist größer als ein Zeiger. Du zerschießt dir den Heap. Das kann dir jederzeit um die Ohren fliegen.<br />
Warum placement new wenn Du doch nur ein <code>new</code> willst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242434</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:52:48 GMT]]></title><description><![CDATA[<p>Okey ich habs jetzt umgeschrieben, vielen Dank.<br />
Übrigens wenn ich in der Threadfunktion meine instanz mit delete am Ende lösche bricht das Program zusammen. <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>Wie kann das sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242436</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:52:48 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 11:53:42 GMT]]></title><description><![CDATA[<p>Okey machts doch nicht, war nur beim placement new so <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>Vielen Dank für die Antworen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242437</guid><dc:creator><![CDATA[Bob Wolfskin]]></dc:creator><pubDate>Thu, 16 Aug 2012 11:53:42 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur als Parameter an Thread übergeben on Thu, 16 Aug 2012 12:05:17 GMT]]></title><description><![CDATA[<p>Bob Wolfskin schrieb:</p>
<blockquote>
<p>Okey machts doch nicht, war nur beim placement new so <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>malloc() &lt;-&gt; delete =&gt; bumm!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2242439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2242439</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 16 Aug 2012 12:05:17 GMT</pubDate></item></channel></rss>