<?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[critical section problem]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich hab ein kleine prograämchen mit 2 threads welceh beide auf den gleichen comport zugreifen können.. eine thread ist ein timer, d.h. er liest zyklisch daten vom comport, und der andere schreib auf knopfdruck daten auf dem comport. Damit nich beide gleichzeit schreiben bzw. lesen können hab ich das mit cirtiacal section syncronisiert.</p>
<p>Ab un zu hängt sich aber das programm auf. Habe rausgefunden, das Thread A in der Critical Section ist, und Thread B auch in die cirtical section will (enterCrictical section). Aber genau bei dieser methode bleibt das progamm hängen. Dürft doch nich passieren?</p>
<p>Er wartet doch bei</p>
<pre><code class="language-cpp">EnterCriticalSection (&amp; _critSection)
</code></pre>
<p>bis der andere thread</p>
<pre><code class="language-cpp">LeaveCriticalSection (&amp; _critSection)
</code></pre>
<p>passiert hat oder?</p>
<p>Hab ne dafür ne Mutex klasse geschrieben:</p>
<pre><code class="language-cpp">class Mutex{

	CRITICAL_SECTION _critSection;

public:

	//Konstruktor
	Mutex () { InitializeCriticalSection (&amp; _critSection); }
    //Destruktor
	~Mutex () { DeleteCriticalSection (&amp; _critSection); }

	//Lock
	void Acquire (UINT i=0){ TRACE(&quot;Before Lock %i\n&quot;,i); EnterCriticalSection (&amp; _critSection); TRACE(&quot;Lock %i\n&quot;,i); }
	//Unlock
    void Release (UINT i=0){ LeaveCriticalSection (&amp; _critSection);TRACE(&quot;UnLock %i\n&quot;,i);  }

};
</code></pre>
<p>EDIT: Wenn er in critical section A geht, sende ich darin noch eine message</p>
<pre><code class="language-cpp">::SendMessage(m_hWnd,WM_PR2_DATASTATE,(WPARAM)it-&gt;c_str(),NULL);
</code></pre>
<p>an<br />
an das fenster in dem ich auch den knopf drücke für datenübertragen..</p>
<p>gibt es probleme mit dem messagehandler?</p>
<p>wenn ich es mit PostMEssage mache schein es zu klappen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/213964/critical-section-problem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 08:06:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/213964.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 May 2008 06:24:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 06:41:29 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich hab ein kleine prograämchen mit 2 threads welceh beide auf den gleichen comport zugreifen können.. eine thread ist ein timer, d.h. er liest zyklisch daten vom comport, und der andere schreib auf knopfdruck daten auf dem comport. Damit nich beide gleichzeit schreiben bzw. lesen können hab ich das mit cirtiacal section syncronisiert.</p>
<p>Ab un zu hängt sich aber das programm auf. Habe rausgefunden, das Thread A in der Critical Section ist, und Thread B auch in die cirtical section will (enterCrictical section). Aber genau bei dieser methode bleibt das progamm hängen. Dürft doch nich passieren?</p>
<p>Er wartet doch bei</p>
<pre><code class="language-cpp">EnterCriticalSection (&amp; _critSection)
</code></pre>
<p>bis der andere thread</p>
<pre><code class="language-cpp">LeaveCriticalSection (&amp; _critSection)
</code></pre>
<p>passiert hat oder?</p>
<p>Hab ne dafür ne Mutex klasse geschrieben:</p>
<pre><code class="language-cpp">class Mutex{

	CRITICAL_SECTION _critSection;

public:

	//Konstruktor
	Mutex () { InitializeCriticalSection (&amp; _critSection); }
    //Destruktor
	~Mutex () { DeleteCriticalSection (&amp; _critSection); }

	//Lock
	void Acquire (UINT i=0){ TRACE(&quot;Before Lock %i\n&quot;,i); EnterCriticalSection (&amp; _critSection); TRACE(&quot;Lock %i\n&quot;,i); }
	//Unlock
    void Release (UINT i=0){ LeaveCriticalSection (&amp; _critSection);TRACE(&quot;UnLock %i\n&quot;,i);  }

};
</code></pre>
<p>EDIT: Wenn er in critical section A geht, sende ich darin noch eine message</p>
<pre><code class="language-cpp">::SendMessage(m_hWnd,WM_PR2_DATASTATE,(WPARAM)it-&gt;c_str(),NULL);
</code></pre>
<p>an<br />
an das fenster in dem ich auch den knopf drücke für datenübertragen..</p>
<p>gibt es probleme mit dem messagehandler?</p>
<p>wenn ich es mit PostMEssage mache schein es zu klappen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515512</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 24 May 2008 06:41:29 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 07:02:11 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>gibt es probleme mit dem messagehandler?</p>
</blockquote>
<p>Soll das ein Ratespiel sein? Woher sollen wir wissen, was dein Messagehandler macht.</p>
<p>PS: Schau dir mal RAII an, ist besser für Mutexes (oder wie ist die Mehrzahl).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515517</guid><dc:creator><![CDATA[Treppenwitz]]></dc:creator><pubDate>Sat, 24 May 2008 07:02:11 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 07:19:39 GMT]]></title><description><![CDATA[<p>Zeig mal lieber die Stelle, wo der Mutex benutzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515523</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sat, 24 May 2008 07:19:39 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 07:48:54 GMT]]></title><description><![CDATA[<p>Forum WinAPI wäre korrekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515532</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Sat, 24 May 2008 07:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 08:07:58 GMT]]></title><description><![CDATA[<p>hallo leute, ich hab nochmal bischzen alles durchdebuggt, und bin auf</p>
<p>folgenes gestoßen:</p>
<p>Thread A durchläuft zyklisch folgenden Code und führt eine Message im Fenster X aus:</p>
<pre><code class="language-cpp">m_Mutes.Acquire ();
::SendMessage(m_hWnd,WM_PR2_DATASTATE,(WPARAM)it-&gt;c_str(),NULL); //Hier hängt er sich auf
m_Mutex.Release();
</code></pre>
<p>Zur gleichen Zeit drück ich ein Button im Fenster X, welcher ein<br />
Messageevent OnClick aufruft in dem ich dieses tu:</p>
<pre><code class="language-cpp">void CThreadTest::OnBnClickedTransfer()
{
m_Mutes.Acquire ();
...
m_Mutex.Release();
</code></pre>
<p>}<br />
d.h. Während er noch die Message der Thread A bearbeitet (welche in Fenster X implementiert ist), drück ich einen Button (welcher in Fenster X sitzt) welcher auch eine Message auslöst.. bumm...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515543</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 24 May 2008 08:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 08:11:58 GMT]]></title><description><![CDATA[<p>Du hast einen Deadlock erkannt, nun behebe ihn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515547</guid><dc:creator><![CDATA[Sehr schön]]></dc:creator><pubDate>Sat, 24 May 2008 08:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 08:20:11 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>hallo leute, ich hab nochmal bischzen alles durchdebuggt, und bin auf</p>
<p>folgenes gestoßen:</p>
<p>Thread A durchläuft zyklisch folgenden Code und führt eine Message im Fenster X aus:</p>
<pre><code class="language-cpp">m_Mutes.Acquire ();
::SendMessage(m_hWnd,WM_PR2_DATASTATE,(WPARAM)it-&gt;c_str(),NULL); //Hier hängt er sich auf
m_Mutex.Release();
</code></pre>
<p>Zur gleichen Zeit drück ich ein Button im Fenster X, welcher ein<br />
Messageevent OnClick aufruft in dem ich dieses tu:</p>
<pre><code class="language-cpp">void CThreadTest::OnBnClickedTransfer()
{
m_Mutes.Acquire ();
...
m_Mutex.Release();
</code></pre>
<p>}<br />
d.h. Während er noch die Message der Thread A bearbeitet (welche in Fenster X implementiert ist), drück ich einen Button (welcher in Fenster X sitzt) welcher auch eine Message auslöst.. bumm...</p>
</blockquote>
<p>Messages von einem anderen Thread and den UI Thread musst du mit PostMessage verschicken. SendMessage ist blockierend und damit hast du wie &quot;Sehr schön&quot; richtig erkannt hat einen Deadlock.</p>
<p>Edit: Wobei das auch nicht immer hilft. Ich verschiebe den Thread mal nach WinAPI <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 />
Edit2: eventuell hilft auch SendMessageAsync ^^<br />
BR<br />
Vinzenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515553</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 24 May 2008 08:20:11 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 08:20:26 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-10455.html" rel="nofollow">evilissimo</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515556</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sat, 24 May 2008 08:20:26 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 08:50:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4355">@evilissimo</a>: danke, so ein deadlock zu erkennen ist gar net so einfach;) ich schau mir mal SendMessageAsync an;)</p>
<p>thx jungs</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515568</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 24 May 2008 08:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 09:10:09 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Hab ne dafür ne Mutex klasse geschrieben:</p>
</blockquote>
<p>wieso schreibt jemand eine klasse für 3 einfach zu verwendende funktionen?<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1515578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515578</guid><dc:creator><![CDATA[fricky]]></dc:creator><pubDate>Sat, 24 May 2008 09:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 10:49:57 GMT]]></title><description><![CDATA[<p>fricky schrieb:</p>
<blockquote>
<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Hab ne dafür ne Mutex klasse geschrieben:</p>
</blockquote>
<p>wieso schreibt jemand eine klasse für 3 einfach zu verwendende funktionen?<br />
<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>
</blockquote>
<p>weil die leute dank des c++ marketing wahns (und durch die teils diletantischen buchempfehlungen von mitgliedern hiesigen forums) den eindruck gewonnen haben, sie müssten alles, aber auch alles, in klassen stopfen, weil ihr code dann modularer und besser sei, etc. typisch c++'ler halt, machens sich immer komplizierter als nötig :lol:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515635</guid><dc:creator><![CDATA[teppichklopfer]]></dc:creator><pubDate>Sat, 24 May 2008 10:49:57 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 12:57:11 GMT]]></title><description><![CDATA[<p>fricky schrieb:</p>
<blockquote>
<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Hab ne dafür ne Mutex klasse geschrieben:</p>
</blockquote>
<p>wieso schreibt jemand eine klasse für 3 einfach zu verwendende funktionen?<br />
<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>
</blockquote>
<p>weil der destruktor der klasse unheimlich hilfreich ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515736</guid><dc:creator><![CDATA[raii]]></dc:creator><pubDate>Sat, 24 May 2008 12:57:11 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 13:10:40 GMT]]></title><description><![CDATA[<p>raii schrieb:</p>
<blockquote>
<p>weil der destruktor der klasse unheimlich hilfreich ist</p>
</blockquote>
<p>aber das critical-section object ist danach auch ungültig, wenn es ein object-member ist. legt man es statisch an, benutzen alle objecte die selbe CS. das bringt auch nix. also besser keine klasse drum herumstricken.<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1515744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515744</guid><dc:creator><![CDATA[fricky]]></dc:creator><pubDate>Sat, 24 May 2008 13:10:40 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 13:13:04 GMT]]></title><description><![CDATA[<p><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="😕"
    /> <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="😕"
    /> <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="😕"
    /> <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="😕"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1515746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515746</guid><dc:creator><![CDATA[fricky]]></dc:creator><pubDate>Sat, 24 May 2008 13:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 13:28:48 GMT]]></title><description><![CDATA[<pre><code>class Mutex
{
    CRITICAL_SECTION *cs;

public:
    Mutex (CRITICAL_SECTION *sect) 
    {
       cs = sect; 
       EnterCriticalSection (cs);
    }

    ~Mutex() 
    {
      LeaveCriticalSection (cs);
    }
};
...
CRITICAL_SECTION the_section;
...
void f()
{
   Mutex m (&amp;the_section);
   // Locked
   ...
} // Unlocked
...
</code></pre>
<p>sinnvoller wäre sowas^^<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1515757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515757</guid><dc:creator><![CDATA[fricky]]></dc:creator><pubDate>Sat, 24 May 2008 13:28:48 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 13:36:36 GMT]]></title><description><![CDATA[<p>Und dein Code funktioniert nicht mal.. Genau deshalb verwendet man Klassen, damit man nicht den Aufruf zu InitializeCriticalSection vergisst. Abgesehen davon ist es doch auch üblich, eine Mutex- und eine MutexLocker- (o.s.ä.) Klasse zu haben.</p>
<p>edit: übrigens auch und vor allem wegen Exceptions, die überspringen beim &quot;Wurf&quot; ja einfach das &quot;Release&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515762</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 24 May 2008 13:36:36 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 13:36:49 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Und dein Code funktioniert nicht mal.. Genau deshalb verwendet man Klassen, damit man nicht den Aufruf zu InitializeCriticalSection vergisst.</p>
</blockquote>
<p>stimmt. ich blindfisch <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>Badestrand schrieb:</p>
<blockquote>
<p>Abgesehen davon ist es doch auch üblich, eine Mutex- und eine MutexLocker- (o.s.ä.) Klasse zu haben.</p>
</blockquote>
<p>nö, mein misslungenes beispiel beweisst doch eindeutig, daß man sowas <strong>nicht</strong> in klassen packen sollte. wo willst du da das InitializeCriticalSection unterbringen?<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1515766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515766</guid><dc:creator><![CDATA[fricky]]></dc:creator><pubDate>Sat, 24 May 2008 13:36:49 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 13:39:51 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>edit: übrigens auch und vor allem wegen Exceptions, die überspringen beim &quot;Wurf&quot; ja einfach das &quot;Release&quot;.</p>
</blockquote>
<p>unter windows hast du dafür '__finally'<br />
übrigens ist SEH weitaus nützlich als C++ exceptions<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1515767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515767</guid><dc:creator><![CDATA[fricky]]></dc:creator><pubDate>Sat, 24 May 2008 13:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 13:40:32 GMT]]></title><description><![CDATA[<p>fricky schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Und dein Code funktioniert nicht mal.. Genau deshalb verwendet man Klassen, damit man nicht den Aufruf zu InitializeCriticalSection vergisst.</p>
</blockquote>
<p>stimmt. ich blindfisch <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>
</blockquote>
<p>hihi :p</p>
<p>fricky schrieb:</p>
<blockquote>
<p>nö, mein misslungenes beispiel beweisst doch eindeutig, daß man sowas <strong>nicht</strong> in klassen packen sollte. wo willst du da das InitializeCriticalSection unterbringen?<br />
<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>
</blockquote>
<pre><code class="language-cpp">class Mutex{

    CRITICAL_SECTION _critSection;

public:

    Mutex () { InitializeCriticalSection (&amp; _critSection); }
    ~Mutex () { DeleteCriticalSection (&amp; _critSection); }

    void Acquire(){ EnterCriticalSection (&amp; _critSection); }
    void Release(){ LeaveCriticalSection (&amp; _critSection); }
};

class MutexLocker
{
    Mutex&amp; cs;

public:
    MutexLocker( Mutex&amp; m ) : cs(m)
    {
       cs.Acquire();
    }

    ~MutexLocker()
    {
        cs.Release();
    }
};

...
Mutex the_section;
...

void f()
{
   MutexLocker m (the_section);
   // Locked
   ...
} // Unlocked
</code></pre>
<p>Meinetwegen auch mit &quot;friend&quot;, damit man auf Aquire und Release keinen Zugriff mehr 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>
]]></description><link>https://www.c-plusplus.net/forum/post/1515768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515768</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 24 May 2008 13:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 13:40:59 GMT]]></title><description><![CDATA[<p>fricky halt einfach deine fresse wenn du keine ahnung hast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1515769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515769</guid><dc:creator><![CDATA[Wilhelm]]></dc:creator><pubDate>Sat, 24 May 2008 13:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sat, 24 May 2008 14:08:23 GMT]]></title><description><![CDATA[<p>sowas hab ich auch noch^^ immer cool bleiben</p>
<pre><code class="language-cpp">class Lock {

private:

    Mutex &amp; _mutex;

public:
    // Acquire the state of the semaphore
    Lock (Mutex &amp;mutex): _mutex(mutex){
        _mutex.Acquire();
    }

	// Release the state of the semaphore
    ~Lock (){ _mutex.Release();	}

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1515785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1515785</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sat, 24 May 2008 14:08:23 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sun, 25 May 2008 08:23:49 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>sowas hab ich auch noch^^ immer cool bleiben</p>
</blockquote>
<p>Gut, man kann ja nie wissen <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>fricky schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>edit: übrigens auch und vor allem wegen Exceptions, die überspringen beim &quot;Wurf&quot; ja einfach das &quot;Release&quot;.</p>
</blockquote>
<p>unter windows hast du dafür '__finally'</p>
</blockquote>
<p>Joar, aber dann musst du ja schon wieder an was denken, ich mag's automatisch (beim Programmieren) <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>fricky schrieb:</p>
<blockquote>
<p>übrigens ist SEH weitaus nützlich als C++ exceptions<br />
<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>
</blockquote>
<p>Das verstehe ich nicht, sind die C++-Exceptions nicht genau &quot;Structured Exception Handling&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1516148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516148</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 25 May 2008 08:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sun, 25 May 2008 08:53:22 GMT]]></title><description><![CDATA[<p>hey leute,<br />
vergisst nochmal die mutex , Lock klassen geschichte, und geht noch mal zu manfng ds Threads..</p>
<p>Ich frage mich wieso es überhaupt eine Dead-lock gibt?????</p>
<p>Wenn ich mit SendMessage eine Msg an das Fenster schicke, ich dann glichzeitig ein button im fenst drücke, können doch keine messages parallel barbeitet wrden oder? d.h. solange die message queue die click message des button bearbeiten, kann der thread doch keine message schicken??? zudem wir in der Klick message aufruffe des Mutex gsperrt, der thread kann schon mal gar keine message schicken? bin verwirrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1516158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516158</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sun, 25 May 2008 08:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sun, 25 May 2008 09:38:53 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>manfng ds</p>
</blockquote>
<p>*very* <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>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Ich frage mich wieso es überhaupt eine Dead-lock gibt?????</p>
</blockquote>
<p>Ist doch logisch, die Funktion &quot;SendMessage&quot; ruft die WndProc auf, die wiederum den Mutex haben will, der aber von der aufrufenden Funktion belegt ist.</p>
<pre><code class="language-cpp">m_Mutes.Acquire (); // Locked

//::SendMessage(m_hWnd,WM_PR2_DATASTATE,(WPARAM)it-&gt;c_str(),NULL); //Hier hängt er sich auf
// Führt onBnClickedTransfer hier aus:
    m_Mutes.Acquire (); // Ist schon gelockt, DeadLock
    ...
    m_Mutex.Release(); 

m_Mutex.Release();
</code></pre>
<p>Also einfach PostMessage nehmen, da wird die Nachricht in die Message-Queue gedrückt und die Funktion kommt sofort zurück. Danach kann auch das Aquire aus onBnClickedTransfer greifen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1516175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516175</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 25 May 2008 09:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sun, 25 May 2008 10:03:45 GMT]]></title><description><![CDATA[<p>ja eben... für das sind mutex doch da:</p>
<p>wenn ich m_Mutes.Acquire (); mache, und schon gelockt ist, müsste er doch da warten bis der Mutex wieder freigegeben ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1516189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516189</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sun, 25 May 2008 10:03:45 GMT</pubDate></item><item><title><![CDATA[Reply to critical section problem on Sun, 25 May 2008 10:50:46 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>wenn ich m_Mutes.Acquire (); mache, und schon gelockt ist, müsste er doch da warten bis der Mutex wieder freigegeben ist...</p>
</blockquote>
<p>Ja klar, aber wie soll er bei diesem linearen Programmstückchen wieder freigegeben werden?:</p>
<pre><code class="language-cpp">Mutex m;
m.Aquire();
m.Aquire();
m.Release();
m.Release();
</code></pre>
<p>Und genau so läuft das bei deinem Programm momentan ja ab <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>Falls das noch nicht so ganz klar geworden ist: Bei SendMessage springt dein Thread (der SendMessage ausführt) in deine WndProc und läuft dort ja direkt in's nächste Aquire. Erst wenn die Abarbeitung der WndProc fertig ist, ist die SendMessage-Funktion &quot;fertig&quot; und das Release nach dem SendMessage wird ausgeführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1516212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516212</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 25 May 2008 10:50:46 GMT</pubDate></item></channel></rss>