<?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[boost TCP-Server Thread sicher machen?]]></title><description><![CDATA[<p>Hi,<br />
mein boost TCP-Server läuft ganz gut.<br />
Blos wie mache ich das ganze jetzt Thread sicher?<br />
So initialisiere ich meinen TCP-Server:</p>
<pre><code class="language-cpp">Server::Server(unsigned short pPort) : mAcceptor(mIo_service, tcp::endpoint(tcp::v4(), pPort))
{
	UID BindedSocket = AddNewSession(&amp;mIo_service);
	mAcceptor.async_accept(mSessionMap[BindedSocket]-&gt;GetSocket(),
		boost::bind(&amp;Server::handle_accept, this, mSessionMap[BindedSocket],
		boost::asio::placeholders::error));
	mIo_service.run();    
}

UID Server::AddNewSession(boost::asio::io_service* pIo_service)
{
	UID CurrentCount = mCounter++;
	mSessionMap[CurrentCount] = new Session(*pIo_service,CurrentCount,this-&gt;HandlePackage,this-&gt;DeleteClient);
	return CurrentCount;
}

void Server::handle_accept(Session* new_session,
      const boost::system::error_code&amp; error)
{
	if (!error)
	{
		new_session-&gt;start();
		UID BindedSocket = AddNewSession(&amp;mIo_service);
    	mAcceptor.async_accept(mSessionMap[BindedSocket]-&gt;GetSocket(),
       		boost::bind(&amp;Server::handle_accept, this, mSessionMap[BindedSocket],
          	 boost::asio::placeholders::error));
	}
	else
	{
		delete new_session;
	}
}
</code></pre>
<p>Session:</p>
<pre><code class="language-cpp">void Session::start()
  {
    socket.async_read_some(boost::asio::buffer(mData, MAX_LENGTH),
		boost::bind(&amp;Session::HandleRead, this,
    boost::asio::placeholders::error));
  }

void Session::HandleRead(const boost::system::error_code&amp; pError)
  {
    if (!pError)
    {
	    socket.async_read_some(boost::asio::buffer(mData, MAX_LENGTH),
			boost::bind(&amp;Session::HandleRead, this,
            boost::asio::placeholders::error));
    }
    else
    {
      delete this;
    }
  }

tcp::socket&amp; Session::GetSocket()
{
    return socket;
}

void Session::HandleWrite(const boost::system::error_code&amp; pError,
		size_t pBytes_transferred)
{
	if (pError)
		delete this;
}
</code></pre>
<p>Jetzt ist ja in jeder Session ein aktiver Thread wenn ich das richtig sehe!?<br />
Es wird dann im anschließenden auf verschiene Objektvariablen und static Funktionen zum Ver- und Entschlüsseln von strings zugegriffen.<br />
Was muss ich alles Thread sicher machen, damit es keine Probleme gibt?<br />
Meines wissens muss ich doch alle Objekt und Member-Variablen zugriffe Thread-sicher machen. Weiterhin kann ich doch normale static funktionen, welche temorär variablen erstellt nicht extra sichern oder?</p>
<p>mfg<br />
gandime</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264750/boost-tcp-server-thread-sicher-machen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 14:30:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264750.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Apr 2010 11:58:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 12:01:01 GMT]]></title><description><![CDATA[<p>Hi,<br />
mein boost TCP-Server läuft ganz gut.<br />
Blos wie mache ich das ganze jetzt Thread sicher?<br />
So initialisiere ich meinen TCP-Server:</p>
<pre><code class="language-cpp">Server::Server(unsigned short pPort) : mAcceptor(mIo_service, tcp::endpoint(tcp::v4(), pPort))
{
	UID BindedSocket = AddNewSession(&amp;mIo_service);
	mAcceptor.async_accept(mSessionMap[BindedSocket]-&gt;GetSocket(),
		boost::bind(&amp;Server::handle_accept, this, mSessionMap[BindedSocket],
		boost::asio::placeholders::error));
	mIo_service.run();    
}

UID Server::AddNewSession(boost::asio::io_service* pIo_service)
{
	UID CurrentCount = mCounter++;
	mSessionMap[CurrentCount] = new Session(*pIo_service,CurrentCount,this-&gt;HandlePackage,this-&gt;DeleteClient);
	return CurrentCount;
}

void Server::handle_accept(Session* new_session,
      const boost::system::error_code&amp; error)
{
	if (!error)
	{
		new_session-&gt;start();
		UID BindedSocket = AddNewSession(&amp;mIo_service);
    	mAcceptor.async_accept(mSessionMap[BindedSocket]-&gt;GetSocket(),
       		boost::bind(&amp;Server::handle_accept, this, mSessionMap[BindedSocket],
          	 boost::asio::placeholders::error));
	}
	else
	{
		delete new_session;
	}
}
</code></pre>
<p>Session:</p>
<pre><code class="language-cpp">void Session::start()
  {
    socket.async_read_some(boost::asio::buffer(mData, MAX_LENGTH),
		boost::bind(&amp;Session::HandleRead, this,
    boost::asio::placeholders::error));
  }

void Session::HandleRead(const boost::system::error_code&amp; pError)
  {
    if (!pError)
    {
	    socket.async_read_some(boost::asio::buffer(mData, MAX_LENGTH),
			boost::bind(&amp;Session::HandleRead, this,
            boost::asio::placeholders::error));
    }
    else
    {
      delete this;
    }
  }

tcp::socket&amp; Session::GetSocket()
{
    return socket;
}

void Session::HandleWrite(const boost::system::error_code&amp; pError,
		size_t pBytes_transferred)
{
	if (pError)
		delete this;
}
</code></pre>
<p>Jetzt ist ja in jeder Session ein aktiver Thread wenn ich das richtig sehe!?<br />
Es wird dann im anschließenden auf verschiene Objektvariablen und static Funktionen zum Ver- und Entschlüsseln von strings zugegriffen.<br />
Was muss ich alles Thread sicher machen, damit es keine Probleme gibt?<br />
Meines wissens muss ich doch alle Objekt und Member-Variablen zugriffe Thread-sicher machen. Weiterhin kann ich doch normale static funktionen, welche temorär variablen erstellt nicht extra sichern oder?</p>
<p>mfg<br />
gandime</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881525</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Apr 2010 12:01:01 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 12:50:10 GMT]]></title><description><![CDATA[<p>Das hängt davon ab, ob Du mehrere <code>io_service</code> -Objekte mit jeweils einem Thread benutzt, oder ein <code>io_service</code> -Objekt mit Threadpool.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881563</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 12 Apr 2010 12:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 13:14:33 GMT]]></title><description><![CDATA[<p>Ich habe genau ein io_service-Objekt.<br />
Also wohl einen Threadpool.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881582</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Apr 2010 13:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 13:33:42 GMT]]></title><description><![CDATA[<p>gandime schrieb:</p>
<blockquote>
<p>Ich habe genau ein io_service-Objekt.<br />
Also wohl einen Threadpool.</p>
</blockquote>
<p>Dann solltest Du die Zugriffe auf Deine Session-Map mit einem <code>strand</code> -Objekt absichern. Das heisst, alle asynchronen Handler, die auf die Session-Map zugreifen, sollten mit einem strand::wrap vorbehandelt werden.</p>
<p>Innerhalb einer Session musst Du gucken, ob Deine Handler in der Session sequentiell ausgeführt werden, oder ob potentiell mehrere Handler auf die gleichen Ressourcen zugreifen können. Zum Beispiel, wenn zwei asynchrone Operationen einen Buffer benutzen. Dann musst Du auch deren Handler wieder mit einem <code>strand</code> wrappen.<br />
Bei ausschließlich sequentieller Ausführung von Handlern musst Du Dir eigentlich keine Gedanken machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881596</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 12 Apr 2010 13:33:42 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 13:42:01 GMT]]></title><description><![CDATA[<p>Wie würde ich dann das ganze bei z.B. der map machen und wie sieht das ganze mit anderen Member-Variablen aus?<br />
Bei Google hab ich bis jetzt noch kein passendes Beispeil dazu gefunden!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881599</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Apr 2010 13:42:01 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 18:47:36 GMT]]></title><description><![CDATA[<p>Guck Dir mal die <code>boost.asio</code> Beispiele an. Da wirst Du fündig werden.<br />
<a href="http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/tutorial/tuttimer5.html" rel="nofollow">Hier</a> zum Beispiel.</p>
<p><em>Link korrigiert...</em> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1881606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881606</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 12 Apr 2010 18:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 17:15:37 GMT]]></title><description><![CDATA[<p>file:///E:/devel/extern/boost_1_39_0/doc/html/boost_asio/tutorial/tuttimer5.html <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="😃"
    /> <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/1881698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881698</guid><dc:creator><![CDATA[a]]></dc:creator><pubDate>Mon, 12 Apr 2010 17:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 17:16:45 GMT]]></title><description><![CDATA[<p>a schrieb:</p>
<blockquote>
<p>file:///E:/devel/extern/boost_1_39_0/doc/html/boost_asio/tutorial/tuttimer5.html <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="😃"
    /> <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>
</blockquote>
<p>Fail. Epic fail. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1881700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881700</guid><dc:creator><![CDATA[FAIL!!!]]></dc:creator><pubDate>Mon, 12 Apr 2010 17:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 17:21:35 GMT]]></title><description><![CDATA[<p>ja von Tachyon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881705</guid><dc:creator><![CDATA[a]]></dc:creator><pubDate>Mon, 12 Apr 2010 17:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 17:33:30 GMT]]></title><description><![CDATA[<p>Wer im inet suchen kann der findet das dann schon^^<br />
Aber ich hab das Bsp leider absolut nicht verstanden <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 />
Ich verstehe nicht was das ganze da macht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881712</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Apr 2010 17:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 18:39:34 GMT]]></title><description><![CDATA[<p>gandime schrieb:</p>
<blockquote>
<p>Jetzt ist ja in jeder Session ein aktiver Thread wenn ich das richtig sehe!?</p>
</blockquote>
<p>Wenn du nichtmal weisst welches Threading-Modell du verwendest, wie soll das dann überhaupt jemals irgendwas werden?</p>
<p>gandime schrieb:</p>
<blockquote>
<p>Aber ich hab das Bsp leider absolut nicht verstanden <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 />
Ich verstehe nicht was das ganze da macht</p>
</blockquote>
<p>Wundert mich garnicht. Die ASIO ist nicht gerade einfach. Sieht oberflächlich vielleicht einfach und kuhl aus, issi dann aber nicht. Also kuhl vielleicht, aber nicht einfach.</p>
<p>Nimm am besten was anderes als Basis für deinen Server.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881749</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 12 Apr 2010 18:39:34 GMT</pubDate></item><item><title><![CDATA[Reply to boost TCP-Server Thread sicher machen? on Mon, 12 Apr 2010 20:56:08 GMT]]></title><description><![CDATA[<p>Ich werde jetzt ganz bestimmt nicht noch eine andere Komponennte o.ä. benutzen!<br />
Wie sehe ich denn welches Threading-Modell ich benutze?</p>
<p>edit:<br />
ist es nicht einfach durch mutex möglich die zugriffe sicher zu machen?</p>
<pre><code class="language-cpp">boost::mutex::scoped_lock lock(mutex);
...
lock.unlock();
</code></pre>
<p>Oder kann es damit zu Problemen kommen?<br />
Ich hab zwar ein paar Testläufe durchlaufen lassen aber wie man wissen sollte ist testen != verifikation!<br />
Außerdem möchte ich langsam etwas profesioneller werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881756</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Apr 2010 20:56:08 GMT</pubDate></item></channel></rss>