<?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[Threads und Objekt]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe ein Objekt x mit mehreren Eigenschaften und stelle im Konstruktor von x mehrere Threads her (die Variable threads ist eine der Eigenschaften von x):</p>
<pre><code class="language-cpp">rc = pthread_create(&amp;threads[t], &amp;attr, worker, NULL);
</code></pre>
<p>In der Funktion worker möchte ich nun eine Funktion aus dem Objekt x aufrufen:</p>
<pre><code class="language-cpp">void *worker(void* arg){
x-&gt;do_work();
}
</code></pre>
<p>Wenn ich das Programm starte, bekomme ich, sobald in der die Funktion x-&gt;do_work eine Variable des Objekts x aufgerufen wird, einen Segmentation fault (Speicherzugriffsfehler). Warum? Wie muss ich die Funktion aufrufen, damit es klappt und könnte man nicht auch im Objekt x selbst die Thread-Funktion *worker unterbringen?</p>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222052/threads-und-objekt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 11:27:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222052.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Sep 2008 00:44:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threads und Objekt on Sun, 07 Sep 2008 00:44:43 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe ein Objekt x mit mehreren Eigenschaften und stelle im Konstruktor von x mehrere Threads her (die Variable threads ist eine der Eigenschaften von x):</p>
<pre><code class="language-cpp">rc = pthread_create(&amp;threads[t], &amp;attr, worker, NULL);
</code></pre>
<p>In der Funktion worker möchte ich nun eine Funktion aus dem Objekt x aufrufen:</p>
<pre><code class="language-cpp">void *worker(void* arg){
x-&gt;do_work();
}
</code></pre>
<p>Wenn ich das Programm starte, bekomme ich, sobald in der die Funktion x-&gt;do_work eine Variable des Objekts x aufgerufen wird, einen Segmentation fault (Speicherzugriffsfehler). Warum? Wie muss ich die Funktion aufrufen, damit es klappt und könnte man nicht auch im Objekt x selbst die Thread-Funktion *worker unterbringen?</p>
<p>Danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577881</guid><dc:creator><![CDATA[C++ - Lerner]]></dc:creator><pubDate>Sun, 07 Sep 2008 00:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to Threads und Objekt on Sun, 07 Sep 2008 06:01:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">rc = pthread_create(&amp;threads[t], &amp;attr, worker, NULL);
</code></pre>
<p>wie ist worker definiert?</p>
<p>ansonsten zeig mal deinen code, meine glasskugel zeigt wiedermal nur schneegestöber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577915</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Sun, 07 Sep 2008 06:01:33 GMT</pubDate></item><item><title><![CDATA[Reply to Threads und Objekt on Sun, 07 Sep 2008 07:01:43 GMT]]></title><description><![CDATA[<p>Lern erst mal programmieren und versuch nach nem 1 mal was mit Threads.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577924</guid><dc:creator><![CDATA[woa]]></dc:creator><pubDate>Sun, 07 Sep 2008 07:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Threads und Objekt on Sun, 07 Sep 2008 16:21:17 GMT]]></title><description><![CDATA[<p>Ich weiß nicht genau wie du die Variable &quot;x&quot; in &quot;worker()&quot; festlegst. Wenn x einen gültigen Wert hat, dürfte hier kein Problem entstehen. So wie du es beschreibst deutet alles daraufhin, dass dies nicht der Fall ist.</p>
<p>Du kannst versuchen, den &quot;this&quot; Zeiger dem startenden Thread als Argument zu übergeben:</p>
<pre><code>rc = pthread_create( &amp;threads[t], &amp;attr, worker, this );
</code></pre>
<p>Angenommen deine Klasse heißt XYZ, dann kannst du den Zeiger im Thread ablesen:</p>
<pre><code>void *worker(void* arg)
{
    XYZ * obj = (XYZ *)arg;

    obj-&gt;do_work();
    [ ... ]
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1578121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578121</guid><dc:creator><![CDATA[alesto]]></dc:creator><pubDate>Sun, 07 Sep 2008 16:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Threads und Objekt on Mon, 08 Sep 2008 07:24:38 GMT]]></title><description><![CDATA[<p>deklarie mal worker &quot;static&quot;, muss der return typ &quot;void*&quot; sein? Zeig mal die ganze klasse..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1578401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1578401</guid><dc:creator><![CDATA[derrwwe]]></dc:creator><pubDate>Mon, 08 Sep 2008 07:24:38 GMT</pubDate></item></channel></rss>