<?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 soll aus einer Methode eine andere Methode starten]]></title><description><![CDATA[<p>Hi,</p>
<p>vielleicht könnt ihr mir helfen. Ich versuche im Moment mit Hilfe von pthread.h eine neue Klasse zu erstellen, in der dann aus einer Methode1 der Klasse eine andere Methode2 aufgerufen wird. Konkretes Beispiel wäre eine Methode die entweder einfach ausgeführt wird oder vorher in einer anderen Methode als Thread aufgerufen wird.</p>
<pre><code class="language-cpp">class Ablauf
{
 public:
 pthread_t thr;
 void starteimHintergrund();
 void starte();
 void funktion();
 private:

};
void funktion()
{
  // tue was
}

void starteimHintergrund()
{
 pthread_create(&amp;thr,NULL,???,NULL);
}
void starte()
{
 funktion();
}
</code></pre>
<pre><code class="language-cpp">int main()
{
 Ablauf a1;
 a1.starteimHintergrund();
 a1.starte();
 return 0;
}
</code></pre>
<p>Hoffe, dass das verständlich ist. <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/topic/247313/pthread-soll-aus-einer-methode-eine-andere-methode-starten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 13:52:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247313.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Aug 2009 11:14:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to pthread soll aus einer Methode eine andere Methode starten on Sun, 09 Aug 2009 11:15:12 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>vielleicht könnt ihr mir helfen. Ich versuche im Moment mit Hilfe von pthread.h eine neue Klasse zu erstellen, in der dann aus einer Methode1 der Klasse eine andere Methode2 aufgerufen wird. Konkretes Beispiel wäre eine Methode die entweder einfach ausgeführt wird oder vorher in einer anderen Methode als Thread aufgerufen wird.</p>
<pre><code class="language-cpp">class Ablauf
{
 public:
 pthread_t thr;
 void starteimHintergrund();
 void starte();
 void funktion();
 private:

};
void funktion()
{
  // tue was
}

void starteimHintergrund()
{
 pthread_create(&amp;thr,NULL,???,NULL);
}
void starte()
{
 funktion();
}
</code></pre>
<pre><code class="language-cpp">int main()
{
 Ablauf a1;
 a1.starteimHintergrund();
 a1.starte();
 return 0;
}
</code></pre>
<p>Hoffe, dass das verständlich ist. <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/1757799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757799</guid><dc:creator><![CDATA[miro]]></dc:creator><pubDate>Sun, 09 Aug 2009 11:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to pthread soll aus einer Methode eine andere Methode starten on Sun, 09 Aug 2009 12:01:49 GMT]]></title><description><![CDATA[<p>Wer ist eigentlich pthread? Warum verwenden den immer mehr Anfänger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757817</guid><dc:creator><![CDATA[hansaschtarwanga]]></dc:creator><pubDate>Sun, 09 Aug 2009 12:01:49 GMT</pubDate></item><item><title><![CDATA[Reply to pthread soll aus einer Methode eine andere Methode starten on Sun, 09 Aug 2009 12:30:50 GMT]]></title><description><![CDATA[<p>1. Du musst den Klassen Scope bei der Def. deiner Klassen Methoden angeben:</p>
<p>Bsp:</p>
<pre><code class="language-cpp">void Ablauf::funktion() 
{ 
  // tue was 
}
</code></pre>
<p>Löst nicht derin Problem mit dem Thread... ich weiss...</p>
<p>Edit:<br />
2. Ich habe dein Bsp ein wenig geändert...</p>
<pre><code class="language-cpp">#include &quot;pthread.h&quot;

class Ablauf
{
public:
    Ablauf();
    void starteimHintergrund();
    void warteAufEnde();
    void starte();
    void funktion();

private:
    static void* thhreadFunktion(void* args);

private:
    pthread_t thread;
};

Ablauf::Ablauf()
: thread()
{
}

void Ablauf::funktion()
{
    // tue was
}

void Ablauf::starteimHintergrund()
{
    pthread_create(&amp;thread, NULL, &amp;Ablauf::thhreadFunktion, this);
}
void Ablauf::warteAufEnde()
{
    pthread_join(thread, 0);
}
void Ablauf::starte()
{
    funktion();
}
void* Ablauf::thhreadFunktion(void* args)
{
    Ablauf* instanz = reinterpret_cast&lt;Ablauf*&gt;(args);
    instanz-&gt;starte();
    return 0;
}

int main()
{
    Ablauf a1;
    a1.starteimHintergrund();
    a1.warteAufEnde();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1757825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757825</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 09 Aug 2009 12:30:50 GMT</pubDate></item><item><title><![CDATA[Reply to pthread soll aus einer Methode eine andere Methode starten on Sun, 09 Aug 2009 14:36:30 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>1. Du musst den Klassen Scope bei der Def. deiner Klassen Methoden angeben:</p>
</blockquote>
<p>Ja, stimmt ... war ein Tippfehler ... die sollte schon eine Methode der Klasse sein. Danke</p>
<p>theta schrieb:</p>
<blockquote>
<p>2. Ich habe dein Bsp ein wenig geändert...</p>
</blockquote>
<p>Ich habe es gerade ausprobiert und der Thread wird gestartet. Ich weiß aus den POSIX-Dokumenten, dass das join wartet (und das Programm anhält) bis der Thread fertig ist ... leider kann er aber auch vor dem Join keine weiteren Funktionen starten:</p>
<pre><code class="language-cpp">#include &quot;pthread.h&quot;
#include &lt;iostream&gt;

using namespace std;

class Ablauf
{
public:
    Ablauf();
    void starteimHintergrund();
    void warteAufEnde();
    void starte();
    void funktion();
    void funktion2();
private:
    static void* thhreadFunktion(void* args);

private:
    pthread_t thread;
};

Ablauf::Ablauf()
: thread()
{
}

void Ablauf::funktion()
{
    cout&lt;&lt;&quot;Ich bin ein Thread&quot;;// tue was
	while(1);
}
void Ablauf::funktion2()
{
    cout&lt;&lt;&quot;Ich bin KEIN Thread&quot;;
}
void Ablauf::starteimHintergrund()
{
    pthread_create(&amp;thread, NULL, &amp;Ablauf::thhreadFunktion, this);
}
void Ablauf::warteAufEnde()
{
    pthread_join(thread, 0);
}
void Ablauf::starte()
{
    funktion();
}
void* Ablauf::thhreadFunktion(void* args)
{
    Ablauf* instanz = reinterpret_cast&lt;Ablauf*&gt;(args);
    instanz-&gt;starte();
    return 0;
}

int main()
{
    Ablauf a1;
    Ablauf a2;
    a1.starteimHintergrund();
    a2.funktion2();
    a1.warteAufEnde();

}
</code></pre>
<p>Vielleicht bin ich ja aber insgesamt auf dem Holzweg. Eigentlich sollen nur mehrere Abläufe (irgendwas wird gesetzt, ausgelesen, etc) hintereinander aber auch parallel ablaufen (halt je nachdem wie der Programmierer es will). Also im Beispiel oben würde funktion 1 z.b. in der Endlosschleife hängen bis irgendwas passiert ... und das dann funktion2 melden die aber nur einmal durchläuft. Ich hoffe ich habe mich verständlich ausgedrückt.</p>
<p>Aber danke bisher Θ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757889</guid><dc:creator><![CDATA[miro]]></dc:creator><pubDate>Sun, 09 Aug 2009 14:36:30 GMT</pubDate></item><item><title><![CDATA[Reply to pthread soll aus einer Methode eine andere Methode starten on Mon, 10 Aug 2009 07:02:46 GMT]]></title><description><![CDATA[<p>Nein du hast dich nicht verstaendlich ausgedrueckt. Wie war doch gleich deine Frage? Wo gibt es Probleme? Ansonsten solltest du vielleicht boost::thread verwenden oder dich mal mehr mit Multithreading auseinandersetzen als nur die POSIX-Dokumente zu lesen. Diese sind nur die Gebrauchsanweisung (naja gut, schon wesentlich mehr).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758091</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 10 Aug 2009 07:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to pthread soll aus einer Methode eine andere Methode starten on Mon, 10 Aug 2009 07:48:49 GMT]]></title><description><![CDATA[<p>Du solltest in deinem Thread den Scope abgeben, damit ein anderer Thread drankommt.</p>
<p>Sprich</p>
<pre><code class="language-cpp">void Ablauf::funktion()
{
    cout&lt;&lt;&quot;Ich bin ein Thread&quot;;// tue was
    while(1){ 
      sleep(1);  // &lt;-- hier
    };
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1758110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758110</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Mon, 10 Aug 2009 07:48:49 GMT</pubDate></item></channel></rss>