<?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[Frage zu Serverimplementierung]]></title><description><![CDATA[<p>Hallo allerseits,<br />
ich habe eine Klasse AbstractServer, die, wie der Name schon vermuten lässt, einen abstrakten Server darstellt. Nun habe ich eine pure virtual Methode</p>
<pre><code class="language-cpp">virtual const &amp;std::string handleMessage(const std::string &amp;message, Client *cl) const = 0;
</code></pre>
<p>definiert, da ja die abgeleiteten, konkreten Server jeweils anders mit Nachrichten umgehen sollen.</p>
<p>Die Server sollen quasi bei run() solange laufen, bis die Stop-funktion aus einem anderen Thread heraus aufgerufen wird. Ich möchte alle konkreten Server in einem ServerManager verwalten, das heisst, ich möchte die Server dort in einem Vector speichern. Nun habe ich dazu mehrere Fragen:</p>
<p>I: Wie implementiert man die run()-Methode der Server am elegantesten, damit ich nach aussen hin lediglich</p>
<p>Server x = new Server();<br />
x.run();</p>
<p>x.stop();</p>
<p>aufrufen kann, ohne nach aussen hin irgendwelche Threads starten zu müssen? Ich hatte die Idee, in der run-Methode einen Thread zu erzeugen, und der ThreadFunc als Argument this mitzugeben, damit ich auf die handleMessage-Methode zugreifen kann. die run()-Methode speichert ein Handle auf den Thread und wartet solange, bis der Thread beendet wurde (also ein anderer Thread server.stop() aufgerufen hat. Was haltet ihr von dieser Idee? Habt ihr bessere, elegantere Vorschläge?</p>
<p>II: Kann ich eigentlich folgendes machen, um im Servermanager die Server zu speichern?</p>
<pre><code class="language-cpp">std::vector&lt;AbstractServer*&gt; x;
x.push_back(new WebServer());  // konkrete Klasse, abgeleitet von AbstractServer
x.push_back(new FileServer()); // konkrete Klasse, abgeleitet von AbstractServer
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/200997/frage-zu-serverimplementierung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 06:54:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200997.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Dec 2007 19:15:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Serverimplementierung on Sat, 22 Dec 2007 19:15:42 GMT]]></title><description><![CDATA[<p>Hallo allerseits,<br />
ich habe eine Klasse AbstractServer, die, wie der Name schon vermuten lässt, einen abstrakten Server darstellt. Nun habe ich eine pure virtual Methode</p>
<pre><code class="language-cpp">virtual const &amp;std::string handleMessage(const std::string &amp;message, Client *cl) const = 0;
</code></pre>
<p>definiert, da ja die abgeleiteten, konkreten Server jeweils anders mit Nachrichten umgehen sollen.</p>
<p>Die Server sollen quasi bei run() solange laufen, bis die Stop-funktion aus einem anderen Thread heraus aufgerufen wird. Ich möchte alle konkreten Server in einem ServerManager verwalten, das heisst, ich möchte die Server dort in einem Vector speichern. Nun habe ich dazu mehrere Fragen:</p>
<p>I: Wie implementiert man die run()-Methode der Server am elegantesten, damit ich nach aussen hin lediglich</p>
<p>Server x = new Server();<br />
x.run();</p>
<p>x.stop();</p>
<p>aufrufen kann, ohne nach aussen hin irgendwelche Threads starten zu müssen? Ich hatte die Idee, in der run-Methode einen Thread zu erzeugen, und der ThreadFunc als Argument this mitzugeben, damit ich auf die handleMessage-Methode zugreifen kann. die run()-Methode speichert ein Handle auf den Thread und wartet solange, bis der Thread beendet wurde (also ein anderer Thread server.stop() aufgerufen hat. Was haltet ihr von dieser Idee? Habt ihr bessere, elegantere Vorschläge?</p>
<p>II: Kann ich eigentlich folgendes machen, um im Servermanager die Server zu speichern?</p>
<pre><code class="language-cpp">std::vector&lt;AbstractServer*&gt; x;
x.push_back(new WebServer());  // konkrete Klasse, abgeleitet von AbstractServer
x.push_back(new FileServer()); // konkrete Klasse, abgeleitet von AbstractServer
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1424931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424931</guid><dc:creator><![CDATA[Trille]]></dc:creator><pubDate>Sat, 22 Dec 2007 19:15:42 GMT</pubDate></item></channel></rss>