<?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[pthread_create mit Methode verwenden]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe mir gerade begonnen eine kleine Socket-Klasse zu schreiben.<br />
Nun habe ich für den Fall dass es sich um ein horchendes Socket handelt eine Methode, welche per accept neue Verbindungen annimmt.</p>
<p>Diese Methode möchte ich nun innerhalb eines eigenen Threads ausführen lassen.<br />
Ist so etwas überhaupt möglich und wenn ja wie?</p>
<p>Hier die wichtigen Codezeilen:</p>
<pre><code class="language-cpp">//Main.cpp
pthread_create (&amp;p1, NULL, con-&gt;acceptClients,0);
//Connection.h
void* acceptClients(void *);
//Connection.cpp
void* Connection::acceptClients(void *)
{
}
</code></pre>
<p>Die Fehlermeldung dich ich im Moment bekomme lautet:</p>
<p>error: argument of type ‘void* (Connection::)(void*)’ does not match ‘void* (<em>)(void</em>)’</p>
<p>Kann mir außerdem jemand erklären, warum man die Klassendefinition und den eigentlichen Programmcode der Klasse getrennt ablegt? (eine .h und eine .cpp Datei)</p>
<p>Danke schonmal im Vorraus<br />
mcemsi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273611/pthread_create-mit-methode-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 00:26:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273611.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Sep 2010 20:16:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Thu, 09 Sep 2010 20:16:54 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe mir gerade begonnen eine kleine Socket-Klasse zu schreiben.<br />
Nun habe ich für den Fall dass es sich um ein horchendes Socket handelt eine Methode, welche per accept neue Verbindungen annimmt.</p>
<p>Diese Methode möchte ich nun innerhalb eines eigenen Threads ausführen lassen.<br />
Ist so etwas überhaupt möglich und wenn ja wie?</p>
<p>Hier die wichtigen Codezeilen:</p>
<pre><code class="language-cpp">//Main.cpp
pthread_create (&amp;p1, NULL, con-&gt;acceptClients,0);
//Connection.h
void* acceptClients(void *);
//Connection.cpp
void* Connection::acceptClients(void *)
{
}
</code></pre>
<p>Die Fehlermeldung dich ich im Moment bekomme lautet:</p>
<p>error: argument of type ‘void* (Connection::)(void*)’ does not match ‘void* (<em>)(void</em>)’</p>
<p>Kann mir außerdem jemand erklären, warum man die Klassendefinition und den eigentlichen Programmcode der Klasse getrennt ablegt? (eine .h und eine .cpp Datei)</p>
<p>Danke schonmal im Vorraus<br />
mcemsi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1950515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1950515</guid><dc:creator><![CDATA[mcemsi]]></dc:creator><pubDate>Thu, 09 Sep 2010 20:16:54 GMT</pubDate></item><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Thu, 09 Sep 2010 20:27:52 GMT]]></title><description><![CDATA[<p>acceptClients<br />
müsste static sein, und einen parameter vom typ <code>void*</code> übergeben bekommen können.</p>
<p>es ist aber nicht static -&gt; signatur passt nicht.</p>
<p><code>(void*) (*) (Connection * const, void*)</code><br />
diesen typ sollte deine fkt haben, wenn mich jz nicht alles täuscht.</p>
<p>also wie gesagt acceptClients static machen und irgend ne krücke als parameter bauen, z.bsp.:</p>
<pre><code class="language-cpp">struct accept_client_parameter
{
  Connection* this_;

  /*eigentliche daten, die die funktion braucht*/
};
</code></pre>
<p>bb</p>
<p>PS: voraus - mit einem r</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1950518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1950518</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Sep 2010 20:27:52 GMT</pubDate></item><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Thu, 09 Sep 2010 20:30:28 GMT]]></title><description><![CDATA[<p>Hey,<br />
Danke erstmal für deine Antwort.<br />
Wenn ich versuche sie static zu machen erhalte ich folgenden Fehler</p>
<pre><code class="language-cpp">Connection.cpp:72: error: cannot declare member function ‘static void* Connection::acceptClients(void*)’ to have static linkage
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1950520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1950520</guid><dc:creator><![CDATA[mcemsi]]></dc:creator><pubDate>Thu, 09 Sep 2010 20:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Thu, 09 Sep 2010 20:35:09 GMT]]></title><description><![CDATA[<p>ich rate mal den code dazu</p>
<pre><code class="language-cpp">/**.cpp*/

static void* acceptConn(void*)
{
 /*...*/
}
</code></pre>
<p>richtig?</p>
<p>falls ja: das static muss natürlich nur in der header-datei beim deklarieren der funktion hin:</p>
<pre><code class="language-cpp">/* *.h*/
struct conn
{
  static void* accept(void*);
};
</code></pre>
<pre><code class="language-cpp">/* *.cpp*/

#include &quot;*.h&quot;

void* conn::accept(void*)
{
 /*...*/
}
</code></pre>
<p>wieso du void* zurückgibst, verstehe ich auch nicht - hast du dir dabei was gedacht oder wolltest du nur die fehlermeldung wegmachen?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1950522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1950522</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Sep 2010 20:35:09 GMT</pubDate></item><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Thu, 09 Sep 2010 20:43:48 GMT]]></title><description><![CDATA[<p>ja, das galt bloß der Fehlermeldung.</p>
<p>ich poste am besten mal etwas mehr vom Code.<br />
Das ist vermutlich für jemanden der sich auskennt recht Sinnlos, bzw. umständlich wenn nicht sogar unmöglich wie ich das versuche.</p>
<pre><code class="language-cpp">//Connection.cpp
#include &quot;Connection.h&quot;
static void* Connection::acceptClients(void *)
{
   int cID;
   Client *cli;

   for(;;)
   {
       if ( ( cID = accept ( this-&gt;sd , NULL , NULL ) ) &lt; 0 )
       {
           cout&lt;&lt;strerror ( errno );
           close ( this-&gt;sd );
           exit ( EXIT_FAILURE );
       }else{
           cout&lt;&lt;cID&lt;&lt;endl;;
           cli = new Client(cID);
       }
   }
}

//Connection.h
class Connection
{
public:
    static void* acceptClients(void *);
};

//main.cpp
Connection *con = new Connection(&quot;TCP&quot;, 4);
pthread_t p1;
pthread_create (&amp;p1, NULL, con-&gt;acceptClients,0);
</code></pre>
<p>Gruß,<br />
mcemsi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1950525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1950525</guid><dc:creator><![CDATA[mcemsi]]></dc:creator><pubDate>Thu, 09 Sep 2010 20:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Thu, 09 Sep 2010 21:30:15 GMT]]></title><description><![CDATA[<p>mal versucht mehr, als nur die ersten 3 zeilen meines posts zu lesen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1950542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1950542</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Sep 2010 21:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Thu, 09 Sep 2010 21:43:16 GMT]]></title><description><![CDATA[<p>ja, hatte das &quot;nur&quot; überlesen <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>Danke (:</p>
<p>Jetzt stehe ich nur vor dem Problem, dass ich innerhalb der statischen Methode nicht mehr per this-&gt; auf die Attribute zugreifen kann ohne dass diese ebenfalls statisch sind oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1950553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1950553</guid><dc:creator><![CDATA[mcemsi]]></dc:creator><pubDate>Thu, 09 Sep 2010 21:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Thu, 09 Sep 2010 22:09:45 GMT]]></title><description><![CDATA[<p>hab ich dir alles schon geschrieben - aber (nicht böse gemeint) vll solltest du dir erst mal die grundlagen angucken?!</p>
<pre><code class="language-cpp">struct conn
{
  void accept()
  {
    pthread_t p1;
    hold_data para(this);
    pthread_create(&amp;p1, NULL, _accept, (void*)para);
  }
private:
  struct hold_data
  {
    conn* this_;

    hold_data(conn* this_) : this_(this_) {}
  };

  static void* _accept(void* data)
  {
    hold_data&amp; m = *reinterpret_cast&lt;hold_data*&gt;(data);
    m.this_-&gt;sock = 0;
  }

  SOCKET sock;
};
</code></pre>
<p>so in etwa...<br />
keine ahnung, in wie weit das hier richtig ist - ich hab kein plan von dem unix-os-zeugs...<br />
auch sonst gibts noch mehr als genug fragen - z.bsp. was genau connect machen soll etc.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1950564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1950564</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Sep 2010 22:09:45 GMT</pubDate></item><item><title><![CDATA[Reply to pthread_create mit Methode verwenden on Fri, 10 Sep 2010 16:32:15 GMT]]></title><description><![CDATA[<p>Ja,<br />
da hast du vermutlich Recht.<br />
Trotzdem vielen Dank für deine Bemühungen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1951015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1951015</guid><dc:creator><![CDATA[mcemsi]]></dc:creator><pubDate>Fri, 10 Sep 2010 16:32:15 GMT</pubDate></item></channel></rss>