<?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[const getter-Methode mit CComCriticalSection schützen]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>wie kann man eine einzeilige getterMethode gegen mehrfachen Zugriff aus verschiedenen Threads schützen?</p>
<pre><code>short CObjectHandler::getNumberOfObjects()  const  //ist public
{
	return m_nNumberOfCurrentObjects;
}
</code></pre>
<p>Folgendes Problem habe ich dabei entdeckt:</p>
<p>Zum Schutz vor mehrfachem Zugriff habe ich eine CComCriticalSection.Die CriticalSection ist eine Membervarable des ObjectHandlers. Da die getterMethode const ist(wie es sein soll) kann ich die Criticalsection nicht locken, bzw unlocken, da das Object verändert werden würde. Außerdem müsste ich die CritSec nach dem return entlocken, was ja nicht geht.<br />
Bin mir jetzt nicht ganz sicher, muss diese einzeilige GetterMethode auch überhaupt gesichert werden muss?</p>
<p>Eine mögliche Lösung wäre folgende, wobei da dann das const wegfallen muss:</p>
<pre><code>short CObjectHandler::getNumberOfObjects()  
{
	short nNum = 0;

	m_critSec.Lock();

	nNum = m_nNumberOfCurrentObjects;

	m_critSec.Unlock();

	return nNum;
}
</code></pre>
<p>Was meint ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282724/const-getter-methode-mit-ccomcriticalsection-schützen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 17:39:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282724.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Feb 2011 08:02:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Fri, 25 Feb 2011 08:08:32 GMT]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>wie kann man eine einzeilige getterMethode gegen mehrfachen Zugriff aus verschiedenen Threads schützen?</p>
<pre><code>short CObjectHandler::getNumberOfObjects()  const  //ist public
{
	return m_nNumberOfCurrentObjects;
}
</code></pre>
<p>Folgendes Problem habe ich dabei entdeckt:</p>
<p>Zum Schutz vor mehrfachem Zugriff habe ich eine CComCriticalSection.Die CriticalSection ist eine Membervarable des ObjectHandlers. Da die getterMethode const ist(wie es sein soll) kann ich die Criticalsection nicht locken, bzw unlocken, da das Object verändert werden würde. Außerdem müsste ich die CritSec nach dem return entlocken, was ja nicht geht.<br />
Bin mir jetzt nicht ganz sicher, muss diese einzeilige GetterMethode auch überhaupt gesichert werden muss?</p>
<p>Eine mögliche Lösung wäre folgende, wobei da dann das const wegfallen muss:</p>
<pre><code>short CObjectHandler::getNumberOfObjects()  
{
	short nNum = 0;

	m_critSec.Lock();

	nNum = m_nNumberOfCurrentObjects;

	m_critSec.Unlock();

	return nNum;
}
</code></pre>
<p>Was meint ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026222</guid><dc:creator><![CDATA[Firewall]]></dc:creator><pubDate>Fri, 25 Feb 2011 08:08:32 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Fri, 25 Feb 2011 10:24:00 GMT]]></title><description><![CDATA[<p>Du könntest m_CritSect mutable machen, um die const-correctness zu wahren. RAII wäre in diesem Zusammenhang auch ganz hübsch:</p>
<pre><code class="language-cpp">class CriticalSectionLock
{
   CriticalSection&amp; CriticalSection_;
public:
   CriticalSectionLock( CriticalSection&amp; CS ) :
      CriticalSection_( CS )
   {
      // Konstruktor betritt die CS
      CriticalSection_.Lock();
   }

   ~CriticalSectionLock() 
   {
      // Destruktor verlässt die CS
      CriticalSection_.Unlock();
   }

private:
   // Obj. nicht kopierbar,
   CriticalSectionLock( const CriticalSectionLock&amp; op );
   CriticalSectionLock&amp; operator=( const CriticalSectionLock&amp; op );
};

short CObjectHandler::getNumberOfObjects() const
{
   CriticalSectionLock Lock( m_critSec );
   return m_nNumberOfCurrentObjects;
}
</code></pre>
<p>Edit<br />
Quelltext korrigiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026227</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 25 Feb 2011 10:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Fri, 25 Feb 2011 13:46:40 GMT]]></title><description><![CDATA[<p>Danke! So werd ichs machen.</p>
<p>edit: hat der Unterstrich am Ende des Variabennames eine besondere Bedeutung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026266</guid><dc:creator><![CDATA[Firewall]]></dc:creator><pubDate>Fri, 25 Feb 2011 13:46:40 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Fri, 25 Feb 2011 17:14:10 GMT]]></title><description><![CDATA[<p>Firewall schrieb:</p>
<blockquote>
<p>edit: hat der Unterstrich am Ende des Variabennames eine besondere Bedeutung?</p>
</blockquote>
<p>Ja. Soll deutlich machen, dass es sich um einen Membervariable handelt. so wie m_...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2026476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2026476</guid><dc:creator><![CDATA[(.) (.)]]></dc:creator><pubDate>Fri, 25 Feb 2011 17:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Wed, 09 Mar 2011 11:00:16 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Du könntest m_CritSect mutable machen, um die const-correctness zu wahren. RAII wäre in diesem Zusammenhang auch ganz hübsch:</p>
<pre><code class="language-cpp">class CriticalSectionLock
{
   CriticalSection&amp; CriticalSection_;
public:
   CriticalSectionLock( CriticalSection&amp; CS ) :
      CriticalSection_( CS )
   {
      // Konstruktor betritt die CS
      CriticalSection_.Lock();
   }

   ~CriticalSectionLock() 
   {
      // Destruktor verlässt die CS
      CriticalSection_.Unlock();
   }

private:
   // Obj. nicht kopierbar,
   CriticalSectionLock( const CriticalSectionLock&amp; op );
   CriticalSectionLock&amp; operator=( const CriticalSectionLock&amp; op );
};

short CObjectHandler::getNumberOfObjects() const
{
   CriticalSectionLock Lock( m_critSec );
   return m_nNumberOfCurrentObjects;
}
</code></pre>
<p>Edit<br />
Quelltext korrigiert</p>
</blockquote>
<p>Folgendes ist mir noch aufgefallen:<br />
Da m_critSec kein Pointer ist, meckert der Compiler wenn ich in Zeile 26 die Critsec einfach so wie im Bsp übergebe.</p>
<pre><code>error C2248: &quot;CCriticalSectionLock::CCriticalSectionLock&quot;: Kein Zugriff auf private Member, dessen Deklaration in der CCriticalSectionLock-Klasse erfolgte.
</code></pre>
<p>Wenn ich CriticalSectionLock Lock( *m_critSec ); mach, dann geht es, aber ist es so auch richtig? Schützt dann die critsec auch wirklich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031684</guid><dc:creator><![CDATA[Firewall]]></dc:creator><pubDate>Wed, 09 Mar 2011 11:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Wed, 09 Mar 2011 11:15:21 GMT]]></title><description><![CDATA[<p>Hi Firewall,</p>
<p>ich stelle mal ganz vorsichtig die Frage:<br />
&quot;Welchen Sinn macht es?&quot;<br />
Ich vermute du erhoffst dir etwas, was du leider nicht dadurch kriegen wirst...</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031696</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Wed, 09 Mar 2011 11:15:21 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Wed, 09 Mar 2011 11:56:06 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17238">@Firewall</a>: nene, der meckert nicht. Nicht bei dem was hier an Code zu sehen ist.<br />
Poste mal ein compilierbares Beispiel (also nicht compilierbar, aber wo der einzige Fehler der von dir genannte ist).</p>
<p>Vermutlich wirst du beim basteln des Beispiels deinen Fehler schon finden, denn es muss fast was ganz triviales sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031718</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 09 Mar 2011 11:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Wed, 09 Mar 2011 12:52:41 GMT]]></title><description><![CDATA[<p>Ok, Fehler gefunden. War wirklich trivial. Tomaten auf den Augen und gleichzeitig ein Blackout... Man hat den Fehler vor den Augen und siehts nicht... War alles richtig mit meinem Programm bis auf den Aufruf:</p>
<pre><code>CCriticalSectionLock( m_csAccessSecure);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2031722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031722</guid><dc:creator><![CDATA[Firewall]]></dc:creator><pubDate>Wed, 09 Mar 2011 12:52:41 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Wed, 09 Mar 2011 12:46:24 GMT]]></title><description><![CDATA[<blockquote>
<p>Da m_critSec kein Pointer ist, meckert der Compiler wenn ich in Zeile 26 die Critsec einfach so wie im Bsp übergebe.</p>
</blockquote>
<p>Oder ist da vielleicht ein K zu viel in &quot;kein Pointer&quot;?<br />
Wenn m_critSec nämlich schon ein Zeiger ist, dann wäre das von dir beschriebene Verhalten mehr oder weniger normal.<br />
(Wobei mich dann immer noch wundert dass er sagt &quot;Kein Zugriff auf private Member&quot; und nicht einfach &quot;kein passender overload gefunden&quot; oder sowas)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031750</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 09 Mar 2011 12:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to const getter-Methode mit CComCriticalSection schützen on Wed, 09 Mar 2011 14:59:19 GMT]]></title><description><![CDATA[<p>XSpilles Frage steht allerdings immer noch unbeantwortet im Raum. Was genau passiert denn eigentlich mit dem Rückgabewert, wird er z.B. benutzt, um Datenelemente anzufordern? Für sich allein betrachtet macht die Implementation der getNumberOfObjects() Methode zwar Sinn, aber vielleicht nicht in einem größeren Kontext.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031827</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 09 Mar 2011 14:59:19 GMT</pubDate></item></channel></rss>