<?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[Probleme beim Synchorniesieren von Threads]]></title><description><![CDATA[<p>Hallo ich habe gerade folgende Situation.</p>
<p>Ich besitze eine beliebiege Anzahl von Threads, welche &quot;paralel&quot; ihre Berechnungen machen und die berechneten Werte in eine gemeinsame Datenbasis Schreiben.<br />
Diese Threads müssen miteinander synchroniesiert werden, da sie untereinander auf die Werte der anderen Threads aus dem letzten Rechendurchgang zurückgreifen.<br />
Daher müssen alle Treads einen Rechendurchgang beendet haben, ihre Daten an die Datenbasis übermittelt haben befor der nächste Rechendurchgang starten darf.</p>
<p>Im Moment versuche ich dies mittels EVENTS und einer Statusverwaltenen Klasse zu realiesieren. Betohnung liegt leider auf Versuche.... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Denn leider funktioniert das einfach nicht so wie es soll.<br />
Und ich sehe den Wald vor lauter Bäumen nicht mehr...... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Im Prinziep suche ich eine Möglichkeit die beliebig vielen Threads<br />
auf ein oder mehrere Events schlafen zu legen und alle gleichzeitig mit einem Signal(en) wieder zu wecken.<br />
Bisher verweisen dafür alle Threads mittels Zeiger auf die eine Statusverwaltene Klasse. Diese zählt die gesammt Anzahl der Threads, sowie jene die sich als Aktiv bei ihr melden und jene die warten auf synch.</p>
<p>Weiter hat die VerwalterKlasse zwei Instanz auf die Klasse EVENT und schickt Threads über diese Instanz schlafen wenn bei einer Prüfung der internen Zähler noch nicht alle Threads mit einem Rechnendurchgang fertig sind. Zu welchem Event die Threads geschickt werden ist abhängig vom Aktuellen Rechendurchlauf. Hintergrund es kamm vor das ein Thread länger zum reaktivieren brauchte und das anstehende Signal von einem anderen Thread der eigendlich warten sollte ,weil er den folgenden Rechendurchgang schon beendet hatte, genutzt wurde, daher 2 verschiedene Events<br />
Der letzte Thread der fertig wird sollte dann alle anderen wieder wecken ohne sich selber schlafen zu legen. *tolle Therorie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> *<br />
Nur leider bekomme ich es nicht hin alle Threads zu wecken.<br />
D.H. es kommt vor das ein Thread sein Signal einfach Tja überhört... und weiter schläft. Was einen Deadlock zur Folge hat. Dies geschieht sporadisch mal im 10 mal im 100 mal im 1000 Rechendurchlauf...</p>
<p>Wenn Jemand einen Ansatz hat wie man das Problem lösen kann Bitte her damit,<br />
wenn ihr noch mehr infos braucht bitte fragen.<br />
Bin für jeden Tipp dankbar, denn solangsam bekomme ich HASS auf diesen Teil meines Programms <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Und schon mal danke an jeden der sich das bis hier her durchgelesen hat <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>Hier die Event Klasse HEADER</p>
<pre><code class="language-cpp">#if !defined EVENTS_H
#define EVENTS_H

#include &lt;windows.h&gt;

class TEvent
{
public:
	TEvent(int = TRUE);
	~TEvent(void);
	void EventSignal(void);
	void EventWait(void);
	void EventReset(void);
	int EventTest(void);
private:
	HANDLE Event;	
};

#endif
</code></pre>
<p>Die Event Klasse CPP</p>
<pre><code class="language-cpp">#include &quot;Events.h&quot;

TEvent::TEvent(int automatic)
{
	Event = CreateEvent(NULL,!automatic,FALSE,NULL);	
}

TEvent::~TEvent(void)
{
	CloseHandle(Event);
}

void TEvent::EventSignal(void)
{
	SetEvent(Event);
}

void TEvent::EventReset(void)
{
	ResetEvent(Event);
}

void TEvent::EventWait(void)
{
	WaitForSingleObject(Event,INFINITE);
}

int TEvent::EventTest(void)
{
	return (WaitForSingleObject(Event,0) != WAIT_TIMEOUT);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/118472/probleme-beim-synchorniesieren-von-threads</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 10:25:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118472.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Aug 2005 16:35:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme beim Synchorniesieren von Threads on Sat, 20 Aug 2005 16:35:41 GMT]]></title><description><![CDATA[<p>Hallo ich habe gerade folgende Situation.</p>
<p>Ich besitze eine beliebiege Anzahl von Threads, welche &quot;paralel&quot; ihre Berechnungen machen und die berechneten Werte in eine gemeinsame Datenbasis Schreiben.<br />
Diese Threads müssen miteinander synchroniesiert werden, da sie untereinander auf die Werte der anderen Threads aus dem letzten Rechendurchgang zurückgreifen.<br />
Daher müssen alle Treads einen Rechendurchgang beendet haben, ihre Daten an die Datenbasis übermittelt haben befor der nächste Rechendurchgang starten darf.</p>
<p>Im Moment versuche ich dies mittels EVENTS und einer Statusverwaltenen Klasse zu realiesieren. Betohnung liegt leider auf Versuche.... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Denn leider funktioniert das einfach nicht so wie es soll.<br />
Und ich sehe den Wald vor lauter Bäumen nicht mehr...... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Im Prinziep suche ich eine Möglichkeit die beliebig vielen Threads<br />
auf ein oder mehrere Events schlafen zu legen und alle gleichzeitig mit einem Signal(en) wieder zu wecken.<br />
Bisher verweisen dafür alle Threads mittels Zeiger auf die eine Statusverwaltene Klasse. Diese zählt die gesammt Anzahl der Threads, sowie jene die sich als Aktiv bei ihr melden und jene die warten auf synch.</p>
<p>Weiter hat die VerwalterKlasse zwei Instanz auf die Klasse EVENT und schickt Threads über diese Instanz schlafen wenn bei einer Prüfung der internen Zähler noch nicht alle Threads mit einem Rechnendurchgang fertig sind. Zu welchem Event die Threads geschickt werden ist abhängig vom Aktuellen Rechendurchlauf. Hintergrund es kamm vor das ein Thread länger zum reaktivieren brauchte und das anstehende Signal von einem anderen Thread der eigendlich warten sollte ,weil er den folgenden Rechendurchgang schon beendet hatte, genutzt wurde, daher 2 verschiedene Events<br />
Der letzte Thread der fertig wird sollte dann alle anderen wieder wecken ohne sich selber schlafen zu legen. *tolle Therorie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> *<br />
Nur leider bekomme ich es nicht hin alle Threads zu wecken.<br />
D.H. es kommt vor das ein Thread sein Signal einfach Tja überhört... und weiter schläft. Was einen Deadlock zur Folge hat. Dies geschieht sporadisch mal im 10 mal im 100 mal im 1000 Rechendurchlauf...</p>
<p>Wenn Jemand einen Ansatz hat wie man das Problem lösen kann Bitte her damit,<br />
wenn ihr noch mehr infos braucht bitte fragen.<br />
Bin für jeden Tipp dankbar, denn solangsam bekomme ich HASS auf diesen Teil meines Programms <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Und schon mal danke an jeden der sich das bis hier her durchgelesen hat <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>Hier die Event Klasse HEADER</p>
<pre><code class="language-cpp">#if !defined EVENTS_H
#define EVENTS_H

#include &lt;windows.h&gt;

class TEvent
{
public:
	TEvent(int = TRUE);
	~TEvent(void);
	void EventSignal(void);
	void EventWait(void);
	void EventReset(void);
	int EventTest(void);
private:
	HANDLE Event;	
};

#endif
</code></pre>
<p>Die Event Klasse CPP</p>
<pre><code class="language-cpp">#include &quot;Events.h&quot;

TEvent::TEvent(int automatic)
{
	Event = CreateEvent(NULL,!automatic,FALSE,NULL);	
}

TEvent::~TEvent(void)
{
	CloseHandle(Event);
}

void TEvent::EventSignal(void)
{
	SetEvent(Event);
}

void TEvent::EventReset(void)
{
	ResetEvent(Event);
}

void TEvent::EventWait(void)
{
	WaitForSingleObject(Event,INFINITE);
}

int TEvent::EventTest(void)
{
	return (WaitForSingleObject(Event,0) != WAIT_TIMEOUT);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/855031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855031</guid><dc:creator><![CDATA[wastman]]></dc:creator><pubDate>Sat, 20 Aug 2005 16:35:41 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Synchorniesieren von Threads on Sat, 20 Aug 2005 17:31:43 GMT]]></title><description><![CDATA[<p>Der Standard(C/C++) kennt keine Threads. Aufgrund deiner Code-Beispiele nehme<br />
ich mal an das du unter Windows programmierst. Daher versuchs mal im WINAPI-Forum.<br />
Verwendest du ein bestimmtes Framework (T.. =&gt; BCC ?) versuch am besten gleich<br />
dort, also MFC- oder Borland-Forum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855060</guid><dc:creator><![CDATA[Chew-Z]]></dc:creator><pubDate>Sat, 20 Aug 2005 17:31:43 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Synchorniesieren von Threads on Sat, 20 Aug 2005 17:46:10 GMT]]></title><description><![CDATA[<p>Ja danke werd ich da Probieren.<br />
Die Methoden für Event kommen ja auch aus der<br />
&lt;Windows.h &gt; :-)hätt ich mir ja selber überlegen können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> ...</p>
<p>Wenn ein Admin das Liest öhm Thread bitte schließen oder Löschen<br />
Werd einen neuen im anderen Bereich anlegen<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855072</guid><dc:creator><![CDATA[wastman]]></dc:creator><pubDate>Sat, 20 Aug 2005 17:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Synchorniesieren von Threads on Sat, 20 Aug 2005 17:52:26 GMT]]></title><description><![CDATA[<p>Das ist nicht nötig, der Thread kann auch einfach verschoben werden. Verrate noch welchen Compiler du benutzt: MSVC oder BCB?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855076</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Sat, 20 Aug 2005 17:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Synchorniesieren von Threads on Sat, 20 Aug 2005 19:19:36 GMT]]></title><description><![CDATA[<p>hmm habe schon neu angelegt.<br />
Merke ich mir aber für das nächste mal <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="🙂"
    /> (hoffe nicht nötig)<br />
Ich nutze als Entwicklungsumgebung Microsft Visual C++ 6.0 AutorenVersion<br />
von daher denke ich mal MSVC <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/855106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855106</guid><dc:creator><![CDATA[wastman]]></dc:creator><pubDate>Sat, 20 Aug 2005 19:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Synchorniesieren von Threads on Sun, 21 Aug 2005 09:35:38 GMT]]></title><description><![CDATA[<p>Hier geht's weiter:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-118478.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-118478.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/855235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855235</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sun, 21 Aug 2005 09:35:38 GMT</pubDate></item></channel></rss>