_beginthread() probleempje

Status
Niet open voor verdere reacties.

erikiej1

Gebruiker
Lid geworden
29 apr 2008
Berichten
138
Ik ben bezig met een vrij groot projectje in m'n eentje, gewoon als hobby, en gebruik daarbij multithreading.
Nu, ik wil een functie starten met _beginthread() uit process.h, zonder parameters door te geven; die zijn niet nodig.
Zie (nogal versimpelde) code.

header.h
Code:
// header.h
class Class{
   public:
   void Function( void* );
};

class.cpp
Code:
//class.cpp
void Class::Function() {
   // ...
}

main.cpp
Code:
//main.cpp
int main() {
   Class c;
   _beginthread( c.Function, 0, NULL );
}

Het is klein, zo lijkt het, maar dit geeft heel versimpeld weer wat ik heb.
Dev-C++ geeft de volgende error:

Code:
 argument of type `void (Player::)(void*)' does not match `void (*)(void*)'

Weet iemand hoe ik dit kan verbeteren? Ik heb al het een en ander geprobeerd, maar ik ben nog niet heel ervaren en wist niet zo goed wat ik deed.
Bij voorbaat dank, Erik.
 
De boel lijkt gewoon te werken als ik de functie uit de klasse haal,
maar ik zou het wel graag als een lidfunctie van die klasse gebruiken,
dus dit lost mijn probleem niet op, maar misschien helpt het bij het oplossen.
 
misschien werkt het als je de functie static maakt.
Code:
// header.h
class Class{
   public:
   static void Function( void* );
};
 
Je geeft als parameter in _beginthread() een functie van het type `void (Player:: )(void*)' mee, terwijl hij `void (*)(void*)' verwacht.
Ik heb ook ooit met een soortgelijk probleem te maken gehad toen ik probeerde een wrapper te maken om win32 code heen.
Misschien dat je wat hebt aan de oplossing van mijn probleem toen: http://www.codeproject.com/KB/winsdk/win32windowwrapperclass.aspx

The main problem

When you create a WNDCLASSEX structure you need to give the structure a pointer to your window procedure in the lpfnWndProc member. The window procedure is a callback, a special kind of function called directly by Windows when needed.

To make callbacks work correctly, strict typedefs are defined in the Windows header files. If you try to use a class member as a callback, the compiler will give you an error, saying that the member prototype does not match the required typedef.
The solution

To get around this compiler error, we need to make the window procedure static. From this static method we then call another method of the class to actually handle the messages.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan