WINAPI - Thread in Klasse erstellen - Geht das?

Von: , Frage gestellt am Di, 5. Jan 2010

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<windows.h>
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 <iostream>
#include <conio.h>
#include <DarkGDK.h>
using namespace std;
class CThread;
std::vector<const CThread*> 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 << "thread\n";
getch();
return 1;
}

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

1 Antworten zu dieser Frage

  1. Antwort von nach 6 Stunden 0 hilfreich
    Erledigt

    Hallo,

    Habs gelöst, hab mir einfach die Boost lib runtergeladen jetzt gehts.

    Gruß Michael

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!