<?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 Correctness und Threadsafety]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich möchte (mit MFC) eine Threadsichere und Const Korrekte FIFO bauen.</p>
<pre><code class="language-cpp">typedef int Message;

#include &lt;afxtempl.h&gt;
#include &lt;Afxmt.h&gt;

class FIFO  
{
public:
	FIFO() {};
	virtual ~FIFO() {};

	int  GetLength() const;		
	void Add(Message&amp; item);		
protected:
	CList&lt;Message, Message&gt; m_list;	

	CCriticalSection m_section;
};
</code></pre>
<pre><code class="language-cpp">void FIFO::Add(Message&amp; item)
{
	CSingleLock lock(&amp;m_section);
	m_list.AddTail(item);
}

int FIFO::GetLength() const
{
	CCriticalSection&amp; sec = const_cast&lt;CCriticalSection&amp;&gt;(m_section);
	CSingleLock lock(&amp;sec);
	//CSingleLock lock(&amp;m_section);	// Konvertierung von 'const class CCriticalSection *' in 
									// 'class CSyncObject *' nicht moeglich
	return m_list.GetCount();
}
</code></pre>
<p>Der Knackpunkt ist dabei die GetLength() Funktion. Die müsste ja eigentlich const sein (so wie im Beispiel). Dann kann man aber kein einfaches</p>
<pre><code class="language-cpp">CSingleLock lock(&amp;m_section);
</code></pre>
<p>mehr machen. Mit const_cast gehts, aber das will ich eigentlich nicht verwenden. Kann man das noch anders lösen oder sollte ich die GetLength Funktion einfach nicht const machen?</p>
<p>Irgendwie beißen sich hier meine Prinzipien...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189745/const-correctness-und-threadsafety</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 03:06:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189745.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Aug 2007 11:43:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Const Correctness und Threadsafety on Thu, 16 Aug 2007 11:44:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich möchte (mit MFC) eine Threadsichere und Const Korrekte FIFO bauen.</p>
<pre><code class="language-cpp">typedef int Message;

#include &lt;afxtempl.h&gt;
#include &lt;Afxmt.h&gt;

class FIFO  
{
public:
	FIFO() {};
	virtual ~FIFO() {};

	int  GetLength() const;		
	void Add(Message&amp; item);		
protected:
	CList&lt;Message, Message&gt; m_list;	

	CCriticalSection m_section;
};
</code></pre>
<pre><code class="language-cpp">void FIFO::Add(Message&amp; item)
{
	CSingleLock lock(&amp;m_section);
	m_list.AddTail(item);
}

int FIFO::GetLength() const
{
	CCriticalSection&amp; sec = const_cast&lt;CCriticalSection&amp;&gt;(m_section);
	CSingleLock lock(&amp;sec);
	//CSingleLock lock(&amp;m_section);	// Konvertierung von 'const class CCriticalSection *' in 
									// 'class CSyncObject *' nicht moeglich
	return m_list.GetCount();
}
</code></pre>
<p>Der Knackpunkt ist dabei die GetLength() Funktion. Die müsste ja eigentlich const sein (so wie im Beispiel). Dann kann man aber kein einfaches</p>
<pre><code class="language-cpp">CSingleLock lock(&amp;m_section);
</code></pre>
<p>mehr machen. Mit const_cast gehts, aber das will ich eigentlich nicht verwenden. Kann man das noch anders lösen oder sollte ich die GetLength Funktion einfach nicht const machen?</p>
<p>Irgendwie beißen sich hier meine Prinzipien...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345690</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Thu, 16 Aug 2007 11:44:17 GMT</pubDate></item><item><title><![CDATA[Reply to Const Correctness und Threadsafety on Thu, 16 Aug 2007 11:48:31 GMT]]></title><description><![CDATA[<p>wie wärs mit &quot;mutable&quot;</p>
<p>da sich die critical section nicht auf den wert ausübt, sondern nur ein paar operationen verzögert ist das denke ich mal tragbar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345694</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Thu, 16 Aug 2007 11:48:31 GMT</pubDate></item><item><title><![CDATA[Reply to Const Correctness und Threadsafety on Thu, 16 Aug 2007 11:48:45 GMT]]></title><description><![CDATA[<p>Dein Problem ist, daß die CS eigentlich nichts zur konzeptionellen Konstanz der Klasse beiträgt, aber trotzdem von dem const erfasst wird. Und die Lösung ist eigentlich ganz einfach: <code>mutable CCriticalSection m_section;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345695</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 16 Aug 2007 11:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Const Correctness und Threadsafety on Thu, 16 Aug 2007 11:58:15 GMT]]></title><description><![CDATA[<p>genau das ist die lösung, danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345705</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Thu, 16 Aug 2007 11:58:15 GMT</pubDate></item></channel></rss>