<?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[Multithreading: Msgs zwischen Threads]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hoffe ich bin im richtigen unterforum <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="🙂"
    /><br />
Ich hätte eine Frage zu Multithreading:</p>
<p>Im moment verwende ich Gcc unter Windows und habe ein wenig mit createThread der winapi rumprobiert. Ist es dabei (einfach) möglich, messages zwischen verschiedenen, laufenden Threads zu versenden?<br />
Laut der Api sollte das ja mit postthreadmessage() funktionieren, aber da hängt sich bei mir einfach mein IDE auf (Omnet++) ohne eine fehlermeldung anzuzeigen.</p>
<p>Ich müsste folgendes Szenario umsetzen:</p>
<p>Klasse A wird 5 mal instanziert und erstellt je einen Thread mit einer Funktion in Klasse A.</p>
<p>In jedem Thread der Instanz der Klasse A wird ein weiterer Thread erstellt, wessen Funktion in Klasse B ist.</p>
<p>In bestimmten Fällen soll die Funktion in Klasse B dann eine message an den Thread in Klasse A schicken, um dort darauf reagieren zu können</p>
<p>ist das mit der windows api möglich? Ich finde einfach keine Beispiele dazu.<br />
Oder muss ich auf externe libs umsteigen?</p>
<p>Vielen Dank und Beste Grüße,<br />
Severin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251527/multithreading-msgs-zwischen-threads</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 05:27:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251527.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Oct 2009 14:56:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Tue, 06 Oct 2009 14:56:14 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hoffe ich bin im richtigen unterforum <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="🙂"
    /><br />
Ich hätte eine Frage zu Multithreading:</p>
<p>Im moment verwende ich Gcc unter Windows und habe ein wenig mit createThread der winapi rumprobiert. Ist es dabei (einfach) möglich, messages zwischen verschiedenen, laufenden Threads zu versenden?<br />
Laut der Api sollte das ja mit postthreadmessage() funktionieren, aber da hängt sich bei mir einfach mein IDE auf (Omnet++) ohne eine fehlermeldung anzuzeigen.</p>
<p>Ich müsste folgendes Szenario umsetzen:</p>
<p>Klasse A wird 5 mal instanziert und erstellt je einen Thread mit einer Funktion in Klasse A.</p>
<p>In jedem Thread der Instanz der Klasse A wird ein weiterer Thread erstellt, wessen Funktion in Klasse B ist.</p>
<p>In bestimmten Fällen soll die Funktion in Klasse B dann eine message an den Thread in Klasse A schicken, um dort darauf reagieren zu können</p>
<p>ist das mit der windows api möglich? Ich finde einfach keine Beispiele dazu.<br />
Oder muss ich auf externe libs umsteigen?</p>
<p>Vielen Dank und Beste Grüße,<br />
Severin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788765</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Tue, 06 Oct 2009 14:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Tue, 06 Oct 2009 16:04:37 GMT]]></title><description><![CDATA[<blockquote>
<p>ist das mit der windows api möglich? Ich finde einfach keine Beispiele dazu. Oder muss ich auf externe libs umsteigen?</p>
</blockquote>
<p>Warum soll das fuer die WinApi machen oder irgendeine andere Lib? Warum nicht selbst machen? Ein einfaches, kleines Eventsystem ist nun nicht gerade schwer oder umstaendlich. (Ich persoenlich wuerde Multithreading nicht so nutzen, eher in der Richtung ... in Java werden sie Callable oder Runable genannt.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788803</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Oct 2009 16:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Tue, 06 Oct 2009 17:02:36 GMT]]></title><description><![CDATA[<p>Welche Vorteile hätte denn ein solches Eventsystem gegenüber meinem Ansatz?<br />
Wichtig ist auf jeden Fall, dass Klassen A und B weiterarbeiten, auch wenn Klasse A auf eine nachricht von B wartet (ich dachte bisher, das ginge nur mit Threads)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788824</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Tue, 06 Oct 2009 17:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Tue, 06 Oct 2009 17:26:21 GMT]]></title><description><![CDATA[<p>Nein, viele Wege fuehren nach Rom. Ich sage ja auch nicht, das du den Threadansatz aufgeben sollst, nur das du die Kommunikation zwischen den Threads selbst in die Hand nehmen sollst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788837</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Oct 2009 17:26:21 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Tue, 06 Oct 2009 17:42:52 GMT]]></title><description><![CDATA[<p>Frage/suche doch im WinAPI Forum danach.</p>
<p>siehe auch: <a href="http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel17.htm" rel="nofollow">http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel17.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788853</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Tue, 06 Oct 2009 17:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Tue, 06 Oct 2009 21:56:02 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>ist das mit der windows api möglich? Ich finde einfach keine Beispiele dazu. Oder muss ich auf externe libs umsteigen?</p>
</blockquote>
<p>Warum soll das fuer die WinApi machen oder irgendeine andere Lib? Warum nicht selbst machen?</p>
</blockquote>
<p>Weil man es selbst nicht korrekt hinbekommt, wenn man auf einem Level ist, wo man solche Fragen stellt.<br />
Aber natürlich: wieso was fertiges, funktionierendes verwenden, wenn man es selbst schreiben, und dabei Fehler machen kann.</p>
<p>(OK, grundsätzlich ist gegen &quot;unnötig&quot; Fehler machen nichts einzuwenden. Wenn es Fehler sind, die man auch findet, den Fehler versteht, eine Lösung findet - die man auch versteht, und so daraus lernt. Beim Thema Multithreading ist es aber so dass man die Fehler meist nicht findet, und selbst wenn, nicht versteht, und dadurch nichts daraus lernt. Zumindest gilt das für die meisten Programmierer. Wer behauptet dass Multithreading nicht schwer ist, hat es entweder selbst nicht verstanden, oder ist einfach sehr schlau/sehr erfahren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788949</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 06 Oct 2009 21:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Wed, 07 Oct 2009 07:01:51 GMT]]></title><description><![CDATA[<p>Durch ein sauberes vorher erstelltes Konzept lassen sich aber auch beim Multithreading Fehler vermeiden. Wenn sie jedoch auftreten, sind sie mitunter schwer zu finden <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>Edit:<br />
ich hab noch ein Projekt rumliegen, was ich abgebrochen habe, weil ich die Ursache für den SegFault nie gefunden habe... <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/1789003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789003</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 07 Oct 2009 07:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Wed, 07 Oct 2009 08:25:34 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Durch ein sauberes vorher erstelltes Konzept lassen sich aber auch beim Multithreading Fehler vermeiden</p>
</blockquote>
<p>Wie soll er ein sauberes Konzept erstellen, wenn er die Spielregeln nicht kennt?<br />
BTW: kennst du sie? Bist du sicher? Ganz sicher?<br />
Ich habe jedenfalls wesentlich mehr falschen Multithreading-Code gesehen, als richtigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789050</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 07 Oct 2009 08:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Wed, 07 Oct 2009 09:07:06 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ich habe jedenfalls wesentlich mehr falschen Multithreading-Code gesehen, als richtigen.</p>
</blockquote>
<p>Und ich hab mehr falschen als richtigen Multithreading-Code produziert <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 />
Das ist nunmal einfach so. <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>
<p>Was ich damit sagen wollte, ist: Wenn man sich vorher vor Augen führt, wer mit wem kommuniziert, welche Kommunikation notwendig / sinnvoll ist und welche Kommunikation man auch irgendwie anders umgehen kann, dann <strong>kann</strong> das die Menge der auftretenden Probleme verringern. Nicht mehr wollte ich damit sagen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1789073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789073</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 07 Oct 2009 09:07:06 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Wed, 07 Oct 2009 09:26:17 GMT]]></title><description><![CDATA[<blockquote>
<p>BTW: kennst du sie? Bist du sicher? Ganz sicher?</p>
</blockquote>
<p>Ich hab nie irgendwelche niedergeschrieben &quot;Spielregeln&quot; gelesen. Aber da ich beruflich relativ häufig mit multithreaded-Serverentwicklung zu tun habe, habe ich inzwischen aus anfänglichen (zahlreichen) Fehlern viel gelernt und meine eigenen Erkenntnisse gesammelt <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>Und daher weiß ich auch, dass ein gutes Konzept hilfreich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789089</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Wed, 07 Oct 2009 09:26:17 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Wed, 07 Oct 2009 12:59:06 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Weil man es selbst nicht korrekt hinbekommt, wenn man auf einem Level ist, wo man solche Fragen stellt.</p>
</blockquote>
<p>Das ist mein erstes C++ Projekt. Ich hab sonst nur Java erfahrung. Allerdings auch nicht mit Multithreading.</p>
<p>Wenn ich dem 2. Thread die ID des ersten Thread übergebe, könnte ich ja postThreadMessage() verwenden, oder ?<br />
Ich müsste nur ein Struct erstellen, welches die Thread ID und einen anderes Objekt enthält, da ich dem 2. Thread noch was andres übergeben muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789217</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Wed, 07 Oct 2009 12:59:06 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Wed, 07 Oct 2009 13:47:28 GMT]]></title><description><![CDATA[<p>SeverinK schrieb:</p>
<blockquote>
<p>Wenn ich dem 2. Thread die ID des ersten Thread übergebe, könnte ich ja postThreadMessage() verwenden, oder ?<br />
Ich müsste nur ein Struct erstellen, welches die Thread ID und einen anderes Objekt enthält, da ich dem 2. Thread noch was andres übergeben muss.</p>
</blockquote>
<p>Der Empfänger-Thread braucht auf jeden Fall eine Message-Queue, sonst wird PostThreadMessage() scheitern. Außerdem kannst du mit PostThreadMessage() keine lokalen Daten übergeben (z.B. den Pointer auf eine struct), da der Aufruf asynchron ist und eine lokale struct nicht mehr existiert, wenn die Message bearbeitet wird.</p>
<p>Wäre es nicht einfacher mit Event-Objekten zu arbeiten? Das fände ich &quot;natürlicher&quot;, falls deine Threads nicht ohnehin Messages verarbeiten. Kuck mal nach CreateEvent() und WaitForSingleObject().</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789247</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Wed, 07 Oct 2009 13:47:28 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Thu, 08 Oct 2009 16:11:36 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Danke für den Vorschlag, Stefan!</p>
<p>Ich habe mich nun ein wenig eingelesen und hätte nun folgende Idee:</p>
<p>Thread A erstellt ein event und eine instanz von klasse B (die brauch ich um in klasse B non static zugreifen zu können).</p>
<p>Die beiden werden dann in ein struct gepackt, und der Funktion von Thread B übergeben (welcher in Thread A erstellt wird)</p>
<p>In Thread B wird dann der Algorithmus durchlaufen und immer wenn es notwendig ist, wird das Event gesetzt. Soweit ich das verstanden habe, kann das event beliebig oft mit SetEvent() getriggert werden, oder?</p>
<p>Thread A merkt das dann mit WaitForSingleObject() und kann eine funktion in Klasse B aufrufen, welche das Objekt, das in Klasse B gefüllt wurde, zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789777</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Thu, 08 Oct 2009 16:11:36 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Thu, 08 Oct 2009 16:52:46 GMT]]></title><description><![CDATA[<p>SeverinK schrieb:</p>
<blockquote>
<p>Hallo,<br />
Danke für den Vorschlag, Stefan!</p>
<p>Ich habe mich nun ein wenig eingelesen und hätte nun folgende Idee:</p>
<p>Thread A erstellt ein event und eine instanz von klasse B (die brauch ich um in klasse B non static zugreifen zu können).</p>
<p>Die beiden werden dann in ein struct gepackt, und der Funktion von Thread B übergeben (welcher in Thread A erstellt wird)</p>
<p>In Thread B wird dann der Algorithmus durchlaufen und immer wenn es notwendig ist, wird das Event gesetzt. Soweit ich das verstanden habe, kann das event beliebig oft mit SetEvent() getriggert werden, oder?</p>
<p>Thread A merkt das dann mit WaitForSingleObject() und kann eine funktion in Klasse B aufrufen, welche das Objekt, das in Klasse B gefüllt wurde, zurückgibt.</p>
</blockquote>
<p>Öhöm --- ich hab mir das jetzt dreimal durchgelesen und versteh's nicht. Kein Kommentar also <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>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789792</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Thu, 08 Oct 2009 16:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Thu, 08 Oct 2009 17:31:15 GMT]]></title><description><![CDATA[<p>hmmm <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>
<p>Dann versuch ichs nochmal (hoffentlich besser verständlich)</p>
<p>Thread A erstellt eine Instanz von Klasse B und ein neues event.<br />
Diese Instanz und das Event packe ich dann in ein Struct.</p>
<p>dann erstell ich in Thread A einen neuen Thread und übergebe an die Threadfunction dieses Threads den pointer zu dem vorher definierten Struct.</p>
<p>in dem neuen Thread (die Funktion ist in Klasse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> mach ich dann wieder ein<br />
Struct aus dem übergebenen pointer und kann somit das event auslösen, oder ?</p>
<p>Dadurch dass in der Thread Funktion in Klasse B dann das event ausgelöst wird, welches in Thread A erstellt wurde, kann ich in Thread A mit WaitForSinlgeObject() darauf reagieren und in diesem Fall eine Funktion in Klasse B aufrufen, welche ein Objekt zurückgibt, welches in Thread B initialisiert wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789809</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Thu, 08 Oct 2009 17:31:15 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Thu, 08 Oct 2009 23:18:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Das ist jetz das struct, welches an die threadFunction übergeben werden soll</p>
<pre><code>typedef struct threadObject{
			ClassB* cB;
			HANDLE* event;
		};
</code></pre>
<p>In Klasse A hab ich jetzt folgendes in einem bereits laufendem thread:</p>
<pre><code>DWORD WINAPI ClassA::threadForReq(LPVOID data){
	ClassA* cA= (ClassA*) data;
	ClassB cB;
	HANDLE event;
	event = CreateEvent(NULL, FALSE, FALSE, 0);
	threadObject to = {&amp;cB, &amp;event};

	HANDLE secondThread;
	secondThread = (HANDLE) CreateThread(NULL,0, cB.threadFunction,
			(void*) &amp;to, 0, NULL);

	DWORD temp = WaitForSingleObject(event, INFINITE);
	switch (temp) {
	case WAIT_OBJECT_0: {
		//doStuff
	}
	}

	return ((DWORD) data);

}
</code></pre>
<p>Und das ist die threadFunction in ClassB nur um zu testen ob das SetEvent funktioniert:</p>
<pre><code>DWORD WINAPI ClassB::threadFunction(LPVOID data) {

	threadObject* to = (threadObject*) data;

	ClassB* cB=  to-&gt;cB;
	HANDLE* event = to-&gt;event;

	Sleep(1000);

        //do some stuff        

	SetEvent(event);
	return ((DWORD) data);
}
</code></pre>
<p>Aber er kommt nie bis zum case WAIT_OBJECT_0<br />
In dem Beispiel [url] <a href="http://msdn.microsoft.com/en-us/library/ms686915%28VS.85%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms686915(VS.85).aspx</a> [/url] wird das aber genauso gemacht, nur halt innerhalb einer Klasse</p>
<p>Was hab ich da jetzt übersehn ? <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>Vielen Dank im Voraus,<br />
Severin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789927</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Thu, 08 Oct 2009 23:18:31 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Thu, 08 Oct 2009 23:38:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">DWORD WINAPI ClassB::threadFunction(LPVOID data) { 

    threadObject* to = (threadObject*) data; 

    ClassB* cB=  to-&gt;cB; 
    HANDLE* event = to-&gt;event; 

    Sleep(1000); 

        //do some stuff         

//    SetEvent(event); // falsch - lässt sich aber dummerweise compilieren, da man void** (==HANDLE*) nach void* (==HANDLE) konvertieren kann
    SetEvent(*event); // richtig

// oder halt so:
    HANDLE event2 = *(to-&gt;event); 
    SetEvent(event2);

    return ((DWORD) data); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1789933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789933</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 08 Oct 2009 23:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Fri, 09 Oct 2009 00:37:33 GMT]]></title><description><![CDATA[<p>Aaaaaah, das wars.. vielen dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Das event sollte ja nach einmal SetEvent wieder auf &quot;false&quot; sein, oder ?</p>
<p>irgendwie stürzt mein programm wahllos ab und es scheint so, als würde<br />
WaitForSingleObject öfters getriggert, obwohl ich nicht mal ne schleife oder ähnliches gebaut habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1789938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1789938</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Fri, 09 Oct 2009 00:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Fri, 09 Oct 2009 07:54:48 GMT]]></title><description><![CDATA[<p>SeverinK schrieb:</p>
<blockquote>
<p>Das event sollte ja nach einmal SetEvent wieder auf &quot;false&quot; sein, oder ?</p>
</blockquote>
<p>ein auto-reset-event geht auf non-signaled sobald ein thread aufgeweckt wurde. das musst nicht mit dem zeitpunkt zusammenstimmen wo SetEvent aufgerufen wurde, denn es muss ja gerade kein thread da sein der wartet.</p>
<p>und ein manual-reset event bleibt sowieso signaled.</p>
<blockquote>
<p>irgendwie stürzt mein programm wahllos ab und es scheint so, als würde<br />
WaitForSingleObject öfters getriggert, obwohl ich nicht mal ne schleife oder ähnliches gebaut habe.</p>
</blockquote>
<p>aha</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1790019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1790019</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 09 Oct 2009 07:54:48 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Fri, 09 Oct 2009 08:14:58 GMT]]></title><description><![CDATA[<p>SeverinK schrieb:</p>
<blockquote>
<p>Aber er kommt nie bis zum case WAIT_OBJECT_0</p>
</blockquote>
<p>Das sollte dir zu denken geben. Wie wär's mit einem Test auf WAIT_FAILED und Auswertung von GetLastError()? Fehlerbehandlung ist manchmal ne ganz gute Idee.</p>
<p>SeverinK schrieb:</p>
<blockquote>
<p>irgendwie stürzt mein programm wahllos ab und es scheint so, als würde<br />
WaitForSingleObject öfters getriggert, obwohl ich nicht mal ne schleife oder ähnliches gebaut habe.</p>
</blockquote>
<p>&quot;Stürzt wahllos ab&quot; ist nicht wirklich eine erschöpfende Beschreibung. Kriegst du Meldungen? Falls ja, welche?</p>
<p>Und lebt das an den Thread übergebene Objekt wirklich lange genug? Immerhin legst du es in einer Funktion als lokales Objekt an! Mach mal eine globale Variable daraus - nur zum Testen - oder verwende new(). Wenns dann keine Abstürze mehr gibt (oder andere <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="😉"
    /> ) bist du vielleicht einen Schritt weiter.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1790030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1790030</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Fri, 09 Oct 2009 08:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Fri, 09 Oct 2009 14:04:38 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>&quot;Stürzt wahllos ab&quot; ist nicht wirklich eine erschöpfende Beschreibung. Kriegst du Meldungen? Falls ja, welche?</p>
<p>Und lebt das an den Thread übergebene Objekt wirklich lange genug? Immerhin legst du es in einer Funktion als lokales Objekt an! Mach mal eine globale Variable daraus - nur zum Testen - oder verwende new(). Wenns dann keine Abstürze mehr gibt (oder andere <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="😉"
    /> ) bist du vielleicht einen Schritt weiter.</p>
<p>Stefan.</p>
</blockquote>
<p>&quot;Stürzt wahllos ab&quot; is leider das einzige was ich dazu sagen kann, weil sich mein IDE (omnet++) aufhängt und die meldung bekomme &quot;Project.exe reagiert nicht mehr&quot;.<br />
Auch im debug modus kann ich nicht mehr herausfinden.</p>
<p>Wenn ich das projekt zum 1. mal starte läuft es durch. wenn ich es dann stoppe und gleich wieder starte hängt es sich auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1790201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1790201</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Fri, 09 Oct 2009 14:04:38 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Mon, 12 Oct 2009 18:25:07 GMT]]></title><description><![CDATA[<p>Ich habe den Thread und das Event jetzt global gemacht, aber es ist immer noch wie zuvor:</p>
<p>Ich starte das programm das 1. mal und es läuft. Starte ich es danach gleich nochmal, hängt es sich einfach auf ohne eine Fehlermeldung oder sonstiges auszugeben.<br />
Auch im debugger kann ich nicht eingrenzen wo genau der Fehler auftritt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791566</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Mon, 12 Oct 2009 18:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Mon, 12 Oct 2009 18:55:39 GMT]]></title><description><![CDATA[<p>Dann hilft dir vielleicht ein Trace weiter: Erstelle dir einen globalen std::ofstream auf eine Datei deiner Wahl. Schreibe an kritischen Stellen Trace-Einträge in den Stream. Wenn das Programm abgestürzt ist, solltest du zumindest herausfinden können, was es zuvor gemacht hat. Etwa so:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;

std::ofstream trace(&quot;c:\\dev\\myprogram\\trace.txt&quot;);

void func() {

   trace &lt;&lt; GetCurrentThreadId() &lt;&lt; &quot;: func() 0&quot; &lt;&lt; std::endl;
   bar();
   trace &lt;&lt; GetCurrentThreadId() &lt;&lt; &quot;: func() 1&quot; &lt;&lt; std::endl;
   DWORD rc = WaitForSingleObject();
   trace &lt;&lt; GetCurrentThreadId() &lt;&lt; &quot;: func() 2&quot; &lt;&lt; std::endl;

   // ... usw.

   trace &lt;&lt; GetCurrentThreadId() &lt;&lt; &quot;: func() exit&quot; &lt;&lt; std::endl;   
}
</code></pre>
<p>Indem du mit GetCurrentThreadId() immer die Thread-Id davor schreibst, weißt du, welcher Thread was gemacht hat.</p>
<p>Das Problem mit dem Trace ist natürlich, dass er möglicherweise das Programm so verlangsamt, dass die Fehler nicht mehr auftreten. Einen Versuch ist es aber vielleicht wert.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791581</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Mon, 12 Oct 2009 18:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading: Msgs zwischen Threads on Mon, 12 Oct 2009 20:28:37 GMT]]></title><description><![CDATA[<p>Danke für die Antwort!</p>
<p>bevor ich das mache, hab ich mal einfach einige zeilen auskommentiert und bin dadurch jetz darauf gekommen, dass das Thread erstellen manachmal einfach nicht funktioniert <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>Also das Thread erstellen läuft ja bereits in ner Threadfunktion eines anderen Threads.</p>
<p>Dieser erste Thread wird noch ohne probleme erstellt, und nur wenn ich</p>
<pre><code>HANDLE secondThread;
    secondThread = (HANDLE) CreateThread(NULL,0, cB.threadFunction,
            (void*) &amp;to, 0, NULL);
</code></pre>
<p>auskommentiere läuft er auch durch. Lass ich dieses CreateThread stehen, kommt es zu dem Fehler (wie gesagt, nicht immer..) Auch wenn ich in der threadFunction dieses secondThreads gar nichts mache, den Thread also nur erstelle, kommt es zu dem Fehler. Das selbe, wenn ich als Parameter nicht das struct sondern gar nichts übergebe.</p>
<p>Ich brauche aber den zweiten Thread in dem ersten Thread, sonst kann ich nicht umsetzen, was ich geplant habe.</p>
<p>Vielen Dank für die Hilfe,<br />
Severin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791642</guid><dc:creator><![CDATA[SeverinK]]></dc:creator><pubDate>Mon, 12 Oct 2009 20:28:37 GMT</pubDate></item></channel></rss>