<?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[Thread-Callbackfuntion in Klasse einpflegen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hatte heute versucht, CreateThread einen Zeiger auf meine Klassenmethode zu übergeben. Nach kurzer Recherche fand ich heraus, dass CreateThread nicht mit Klassenmethoden zusammenarbeitet. Nun dachte ich mir, dass ich meine Callbackfunktion einfach global ausserhalb der Klasse definiere, was auch prinzipiell ganz gut klappte. Das Problem an der Sache ist nur, dass innerhalb dieser Funktion mit verschiedenen Klasseneigenschaften gearbeitet wird. Ich brauche also zwingend eine Klasseninstanz.</p>
<p>Zuerst dachte ich mir, dass ich meiner Klasse eine Methode <em>MeineKlasse</em> GetInstance()* definiere, die die Instanz (this) zurückgibt. In der Callbackfunktion wollte ich sie folgendermaßen anwenden:</p>
<pre><code class="language-cpp">DWORD WINAPI ThreadProc(void *lpParam)
{
   MeineKlasse inst = *MeineKlasse::GetInstance();
}
</code></pre>
<p>Allerdings brachte mir der Compiler dann die Fehlermeldung, dass diese GetInstance Methode nicht statisch ist... Und wenn sie statisch deklariert wurde (<em>static</em>), dann kam die selbe Fehlermeldung.</p>
<p>Meine Frage dazu ist: Kann ich irgendwie alternativ an die Klasseninstanz kommen, oder geht das nicht? Und wenn das der Fall ist, wie bekomme ich dann diese Callbackfunktion zum Laufen? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199967/thread-callbackfuntion-in-klasse-einpflegen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 21:59:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199967.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Dec 2007 04:20:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread-Callbackfuntion in Klasse einpflegen? on Sun, 09 Dec 2007 04:20:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hatte heute versucht, CreateThread einen Zeiger auf meine Klassenmethode zu übergeben. Nach kurzer Recherche fand ich heraus, dass CreateThread nicht mit Klassenmethoden zusammenarbeitet. Nun dachte ich mir, dass ich meine Callbackfunktion einfach global ausserhalb der Klasse definiere, was auch prinzipiell ganz gut klappte. Das Problem an der Sache ist nur, dass innerhalb dieser Funktion mit verschiedenen Klasseneigenschaften gearbeitet wird. Ich brauche also zwingend eine Klasseninstanz.</p>
<p>Zuerst dachte ich mir, dass ich meiner Klasse eine Methode <em>MeineKlasse</em> GetInstance()* definiere, die die Instanz (this) zurückgibt. In der Callbackfunktion wollte ich sie folgendermaßen anwenden:</p>
<pre><code class="language-cpp">DWORD WINAPI ThreadProc(void *lpParam)
{
   MeineKlasse inst = *MeineKlasse::GetInstance();
}
</code></pre>
<p>Allerdings brachte mir der Compiler dann die Fehlermeldung, dass diese GetInstance Methode nicht statisch ist... Und wenn sie statisch deklariert wurde (<em>static</em>), dann kam die selbe Fehlermeldung.</p>
<p>Meine Frage dazu ist: Kann ich irgendwie alternativ an die Klasseninstanz kommen, oder geht das nicht? Und wenn das der Fall ist, wie bekomme ich dann diese Callbackfunktion zum Laufen? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417397</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sun, 09 Dec 2007 04:20:46 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Callbackfuntion in Klasse einpflegen? on Sun, 09 Dec 2007 08:54:54 GMT]]></title><description><![CDATA[<p>rate mal wofür lpParam da ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417417</guid><dc:creator><![CDATA[this]]></dc:creator><pubDate>Sun, 09 Dec 2007 08:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Callbackfuntion in Klasse einpflegen? on Sun, 09 Dec 2007 09:55:35 GMT]]></title><description><![CDATA[<p>1. Du definierst <strong>ThreadProc</strong> als statische Methode in Deiner Klasse:</p>
<pre><code class="language-cpp">static DWORD WINAPI ThreadProc(void *lpParam);
</code></pre>
<p>2. Du übergibst <strong>CreateThread</strong> in <strong>lpParameter</strong> einen Zeiger auf Deine Klasse.</p>
<p>3. <strong>ThreadProc</strong> sieht dann so aus:</p>
<pre><code class="language-cpp">DWORD WINAPI MeineKlasse::ThreadProc(void *lpParam)
{ 
   MeineKlasse* inst = (MeineKlasse*) lpParam; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1417433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417433</guid><dc:creator><![CDATA[sri]]></dc:creator><pubDate>Sun, 09 Dec 2007 09:55:35 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Callbackfuntion in Klasse einpflegen? on Sun, 09 Dec 2007 12:27:12 GMT]]></title><description><![CDATA[<p>Hey danke, so funktioniert es. Mit dem lpParam hätte ich wohl auch draufkommen können, aber das mit dem static war mir neu<br />
...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417512</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sun, 09 Dec 2007 12:27:12 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Callbackfuntion in Klasse einpflegen? on Sun, 09 Dec 2007 12:38:52 GMT]]></title><description><![CDATA[<p>Hmm und um dir dann viel Schreibarbeit zu sparen, machst du es noch anders:</p>
<pre><code class="language-cpp">class thread
{
public:
    virtual void create(); // hier rufst du dann CreateThread/beginthread(ex) auf (mit this als Zeiger).

protected:
    virtual DWORD WINAPI thread_proc()
    { return 0; }

private:
    static DWORD WINAPI __thread_proc(LPVOID lpInstance);
    { thread* ptr_instance(static_cast&lt;thread*&gt;(lpInstance)); return ptr_instance-&gt;thread_proc();  }
};
</code></pre>
<p>thread_proc überlädst du einfach ...<br />
ehm wobei man dann am einfachsten sich noch was mit templates bastelt, so das man auch dem Thread noch andere Parameter mitgeben kann ... (struct param { _Type1&amp; type1; _Type2&amp; type2; thread* ptr_thread; } usw. ...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417521</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 09 Dec 2007 12:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to Thread-Callbackfuntion in Klasse einpflegen? on Sun, 09 Dec 2007 13:32:36 GMT]]></title><description><![CDATA[<p>Okay danke, ist 'ne gute Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417552</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sun, 09 Dec 2007 13:32:36 GMT</pubDate></item></channel></rss>