PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ _beginthread Funktionsaufruf Problem



Bismarck_1
16.07.2010, 21:50
Habe eine Funktion in einer Klasse. Diese Funktion soll in der main als Thread gestartet werden. Ich beiße mir momentan die Zähne an dieser Fehlermeldung:


error C3867: "CInstanz::scan": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&CInstanz::scan", um einen Zeiger auf den Member zu erstellen.(Bin C++ Beginner)

IRET
16.07.2010, 21:57
Der betroffene Code wäre gut.
Mit der Fehlermeldung selber kann ich nichts anfangen?..
//Edit:
Und der Compiler

blackberry
16.07.2010, 21:59
Wenn die Argumentliste fehlt heißt das wohl, dass du vergessen hast betroffene Parameter anzugeben.
Ansonsten wäre es wie fuckinghot19 bereits erwähnte sicher nicht verkehrt zumindest den Prototyp der Klasse mal zu posten.

Bismarck_1
16.07.2010, 22:07
Microsoft Visual C++ 2008 Express Edition


#include <iostream>
#include <process.h>

using namespace std;

class CInstanz
{
public:
void scan();

};

void CInstanz::scan()
{
cout << "Test";
}

int main()
{
CInstanz pThread;
_beginthread(pThread.scan, 0, NULL);
return 0;
}

AlterHacker
16.07.2010, 22:14
_beginthread( &pThread.scan, 0, NULL);

Du musst der Funktion einen ZEIGER! auf die Funktion geben.

Bismarck_1
16.07.2010, 22:19
_beginthread( &pThread.scan, 0, NULL);
Du musst der Funktion einen ZEIGER! auf die Funktion geben.



Die nächste Fehlermeldung:


error C2276: '&': Ungültige Operation auf Ausdruck einer gebundenen Memberfunktion

Cardano
16.07.2010, 22:42
Ich weiß es jetzt auch nicht aus dem Kopf ob man das ganze Mit Memberfunktionen machen kann, ich würde probieren die Methoden scan als static zu deklarieren, sodass du sie auch außerhalb einer Instanz verwenden kannst und sie dann über &CInstanz::scan addressieren kannst. Ich habe mich leider noch nicht mit Threads beschäftigt, aber der MSDN Eintrag deiner Funktion sagt folgendes

_beginthread, _beginthreadex (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=DE-DE&k=k%28%22PROCESS%2f_BEGINTHREAD%22%29;k%28_BEGINTH READ%29&rd=true)



uintptr_t _beginthread( // NATIVE CODE void( __cdecl *start_address )( void * ), unsigned stack_size, void *arglist );
Also braucht deine zu übergebene Funktion mindestens den Parameter eines void stars.
Versuch es mal wie folgt (ich kann es gerade nicht testen):



#include <iostream>
#include <process.h>

using namespace std;

class CInstanz
{
public:
static void scan(void *);

};
void CInstanz::scan(void *)
{
cout << "Test";
}

int main()
{
CInstanz pThread;
_beginthread(&CInstanz::scan, 0, NULL);
return 0;
}

Bismarck_1
16.07.2010, 22:45
@Cardano (http://free-hack.com/member.php?u=68660)

Es funktioniert. Genial!