<?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[Neuer Thread mit _beginthreadex-&amp;gt;Threadfunktion ist eine Klasse...=Fehler?]]></title><description><![CDATA[<p>Also folgendes:</p>
<p>Ich möchte eine bestimmte Funktion in einem extra Thread ausführen lassen.<br />
Diese Funktion ist in einer Klasse.<br />
Siehe Code:</p>
<pre><code>ULONG ThreadID;
				DWORD exitcode;
				HANDLE hThread_main=NULL;

				CCommunication com;
				com.M_SetComm(KSTP0,socket_j,0,pECB2);

				hThread_main=_beginthreadex(NULL,0,com.M_CommStr,&amp;kostenstelle_str,0,&amp;ThreadID);
</code></pre>
<p>Fehlermeldung:</p>
<blockquote>
<p>Fehler 1 error C3867: &quot;CCommunication::M_CommStr&quot;: Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie &quot;&amp;CCommunication::M_CommStr&quot;, um einen Zeiger auf den Member zu erstellen</p>
</blockquote>
<p>Mache ich den Aufruf so:</p>
<pre><code>hThread_main=_beginthreadex(NULL,0,com.M_CommStr(&amp;kostenstelle_str),&amp;kostenstelle_str,0,&amp;ThreadID);
</code></pre>
<p>Kommt folgende FEhlermeldung:</p>
<blockquote>
<p>Fehler 1 error C2664: '_beginthreadex': Konvertierung des Parameters 3 von 'int' in 'unsigned int (__stdcall *)(void *)' nicht möglich</p>
</blockquote>
<p>Nehme ich eine Funktion, die nicht in einer Klasse ist, funktioniert alles.</p>
<p>1. Ich verstehe nicht, daß er motzt,daß die Argumentliste fehlt, da das Argument der Funktion doch im nächsten Argument der Funktion _beginthreadex übergben wird.</p>
<p>2. Was kann der da nicht umwandeln?</p>
<p>Die Funktion com.M_CommStr gibt einen int zurück.</p>
<p>Kann mir jemand sagen was ich da falsch mache und warum es mit einen &quot;normalen&quot; funktion funktioniert?<br />
Brauch der irgendwie die adresse der Klasse oder sowas?</p>
<p>Danke Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175110/neuer-thread-mit-_beginthreadex-gt-threadfunktion-ist-eine-klasse-fehler</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 02:09:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175110.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Mar 2007 10:16:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Neuer Thread mit _beginthreadex-&amp;gt;Threadfunktion ist eine Klasse...=Fehler? on Wed, 07 Mar 2007 10:16:13 GMT]]></title><description><![CDATA[<p>Also folgendes:</p>
<p>Ich möchte eine bestimmte Funktion in einem extra Thread ausführen lassen.<br />
Diese Funktion ist in einer Klasse.<br />
Siehe Code:</p>
<pre><code>ULONG ThreadID;
				DWORD exitcode;
				HANDLE hThread_main=NULL;

				CCommunication com;
				com.M_SetComm(KSTP0,socket_j,0,pECB2);

				hThread_main=_beginthreadex(NULL,0,com.M_CommStr,&amp;kostenstelle_str,0,&amp;ThreadID);
</code></pre>
<p>Fehlermeldung:</p>
<blockquote>
<p>Fehler 1 error C3867: &quot;CCommunication::M_CommStr&quot;: Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie &quot;&amp;CCommunication::M_CommStr&quot;, um einen Zeiger auf den Member zu erstellen</p>
</blockquote>
<p>Mache ich den Aufruf so:</p>
<pre><code>hThread_main=_beginthreadex(NULL,0,com.M_CommStr(&amp;kostenstelle_str),&amp;kostenstelle_str,0,&amp;ThreadID);
</code></pre>
<p>Kommt folgende FEhlermeldung:</p>
<blockquote>
<p>Fehler 1 error C2664: '_beginthreadex': Konvertierung des Parameters 3 von 'int' in 'unsigned int (__stdcall *)(void *)' nicht möglich</p>
</blockquote>
<p>Nehme ich eine Funktion, die nicht in einer Klasse ist, funktioniert alles.</p>
<p>1. Ich verstehe nicht, daß er motzt,daß die Argumentliste fehlt, da das Argument der Funktion doch im nächsten Argument der Funktion _beginthreadex übergben wird.</p>
<p>2. Was kann der da nicht umwandeln?</p>
<p>Die Funktion com.M_CommStr gibt einen int zurück.</p>
<p>Kann mir jemand sagen was ich da falsch mache und warum es mit einen &quot;normalen&quot; funktion funktioniert?<br />
Brauch der irgendwie die adresse der Klasse oder sowas?</p>
<p>Danke Mondmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1240805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1240805</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Wed, 07 Mar 2007 10:16:13 GMT</pubDate></item><item><title><![CDATA[Reply to Neuer Thread mit _beginthreadex-&amp;gt;Threadfunktion ist eine Klasse...=Fehler? on Fri, 09 Mar 2007 11:41:24 GMT]]></title><description><![CDATA[<p>_beginthread benötigt keinen &quot;statischen&quot; Zeiger auf eine Funktion. Es ist kein Zeiger auf eine Methode erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242216</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 09 Mar 2007 11:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to Neuer Thread mit _beginthreadex-&amp;gt;Threadfunktion ist eine Klasse...=Fehler? on Fri, 09 Mar 2007 11:41:51 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-18363.html" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-58.html" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242218</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 09 Mar 2007 11:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to Neuer Thread mit _beginthreadex-&amp;gt;Threadfunktion ist eine Klasse...=Fehler? on Tue, 27 Nov 2007 12:12:41 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>_beginthread benötigt keinen &quot;statischen&quot; Zeiger auf eine Funktion. Es ist kein Zeiger auf eine Methode erlaubt.</p>
</blockquote>
<p>Also kann ich generell keine Methode einer Klasse als Threadfunktion angeben?<br />
Static ist nicht drin, sollte Threadsicher sein...</p>
<p>Wäre eine mögliche Lösung, daß ich eine &quot;normale&quot; Funktion als Threadfunc nehme und in dieser eine Instanz der Klasse erzeuge und die Methode aufrufe?</p>
<p>Ich habs getestet, es funktioniert, nur ist die Frage obs Zufall ist oder richtig funktioniert...</p>
<p>Das &quot;vielleicht&quot; Problem dabei ist, daß ich bisher der Threadfunktion einen Zeiger auf einen string übergeben habe.<br />
Diesen übergebe ich nun der neuen threadfunc und die threadfunc dann der Methode.</p>
<p>Die KLasse in der die Methode ist, ist in einer *.lib die ich gemacht habe...</p>
<p>Die Preisfrage ist eigentlich: Ist das Ganze dann noch Threadsicher?<br />
Wie stehts mit der Lebensdauer der Variablen?</p>
<p>Hier mal etwas Code:</p>
<p>Erst die Klasse:</p>
<pre><code class="language-cpp">class CCommunication{

public:
	void M_SetComm();
	void M_CommStr(void);	

	CCommunication(void);	
	~CCommunication(void);	

	std::string empfang;	
	unsigned short Flag;
	unsigned int buffsize;
	std::string DebugLevel;
	SOCKET sock;
	EXTENSION_CONTROL_BLOCK *c_ECB;

	void CCommunikation(void)
	{
		this-&gt;empfang=&quot;&quot;;
		this-&gt;Flag=0;
		this-&gt;buffsize=0;
		this-&gt;DebugLevel=&quot;&quot;;
		this-&gt;sock=0,
		this-&gt;c_ECB=NULL;
	}

};
</code></pre>
<p>Die Threadfunktion:</p>
<pre><code>void FKT_test(std::string &amp;back)
{
	int ausw_pos;
	char ausweis[64];

	[b]CCommunication cm;[/b]
	CErrortext ce;
	cm.empfang = back;//Erst zuweisen, dann Ausweis extrahieren

	(.......)

			cm.sock = socket;
			cm.buffsize = MAX_REC_BUF;
			cm.DebugLevel = DEBUGLEVEL;						

		(.......)

		if(cm.sock == 0)
			throw( ce.M_error(&quot;002312&quot;,_zeile) );

               cm.M_CommStr();
	         back = cm.empfang;

// cm.empfang wird in M-ComStr() verarbeitet und neu beschrieben, diesen 
String brauche ich hier für die weitere verarbeitung.

}
</code></pre>
<p>Und die Methode:</p>
<pre><code>void  CCommunication::M_CommStr()
{

// hier benutze ich alle Klassenvariablen.
// empfang vor allem wird beschrieben mit einem langen String.

empfang= &quot;texttexttexttext............&quot;;

}
</code></pre>
<p>Der Aufruf:</p>
<pre><code>com_plan=ausweis;
				com_plan+=&quot;/&quot;;
				com_plan+=&quot;PT_TAPL&quot;;//Grunddaten

hThread_main= chBEGINNTHREADEX(NULL,0,&amp;[b]FKT_test[/b],(void*)&amp;com_plan,0,&amp;ThreadID);				

	DWORD dw=WaitForSingleObject(hThread_main,TIMETOWAIT);

				switch(dw)
				{
				case WAIT_OBJECT_0:
                                if(com_plan.empty());.......
                               Hier verarbeite ich com_plan weiter
                                break;
                                }

(....)
USW USF...
</code></pre>
<p>Ich warte also bis sich der Thread selbst beendet, wenn nicht dann wird er nach einer bestimmten Zeit beenden.</p>
<p>Sollte doch so funktionieren oder?<br />
Die Variablen sollten mir bis zum zerstören des Threads zur Verfügung stehen.</p>
<p>Was meint Ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1410827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1410827</guid><dc:creator><![CDATA[Mondmann]]></dc:creator><pubDate>Tue, 27 Nov 2007 12:12:41 GMT</pubDate></item></channel></rss>