Hallo,
Ich würde gerne in einer Klasse eine Threadfunktion erstellen und diesen Thread dann von der Klasse starten lassen. Ich hab probiert es selbst zu schreiben, sieht so aus:
#include
class ThreadTestClass
{
private:
HANDLE hThread;
DWORD dThread;
public:
ThreadTestClass(){};
~ThreadTestClass(){};
DWORD WINAPI ThreadTest(LPVOID)
{
MessageBox(0, "Thread läuft...", "Thread", MB\_OK);
return 0;
};
void test()
{
hThread = CreateThread(NULL, 0, this-\>ThreadTest, 0, 0, &dThread);
};
};
int main()
{
ThreadTestClass test;
test.test();
return 1;
}
Da kam die Fehlermeldung:
Fehler 1 error C3867: „ThreadTestClass::ThreadTest“: Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie „&ThreadTestClass::ThreadTest“, um einen Zeiger auf den Member zu erstellen. class.cpp 18
Dann hab ich etwas gegooglet und etwas gefunden, sieht so aus:
#include
#include
#include
using namespace std;
class CThread;
std::vector g\_ThreadContainer;
class CThread
{
private:
HANDLE hThread;
public:
CThread(){}
~CThread(){}
void Run( void )
{
g\_ThreadContainer.push\_back(this);
size\_t index = g\_ThreadContainer.size()-1;
this-\>hThread = CreateThread(NULL, 0, (LPTHREAD\_START\_ROUTINE)&CThread::ThreadProc, (void\*)&index, 0, NULL);
}
void Suspend( void )
{
// ...
}
static DWORD WINAPI ThreadProc( int index )
{
CThread \*pInstance = g\_ThreadContainer.at(index);
return pInstance-\>Start();
}
protected:
virtual DWORD Start( void )
{
return 0;
}
}/\* class CThread \*/;
int main()
{
CThread test;
test.Run();
cout
da kommt diese Fehlermeldung:
Fehler 1 error C2440: 'Initialisierung': 'const CThread \*' kann nicht in 'CThread \*' konvertiert werden classthread.cpp 34
Diese Möglichkeit funktioniert aber nur wenn ich die DarkGDK.h einbinde.
Weiss jemand wie ich es schaffen kann das ich aus einer Klasse einen Thread starten kann?
Gruß Michael