ARTHUR
ARTHUR

Reputation: 19

Can't use SDL Threads

I'm using Visual Studio 2012 with SDL and I'm doing a simple threading task but I always get these errors:

argument of type "int (mainGame::*)(void *ptr)" is incompatible with parameter of type "int (__cdecl *)(void *)"

The other error I'm getting:

error C3867: 'mainGame::gameEvents': function call missing argument list; use '&mainGame::gameEvents' to create a pointer to member

This is how the function is written:

int gameEvents(void *ptr){
   //do things here.
return 0;
}

This is the code I'm using to call the function:

SDL_Thread* gh;  
 gh = SDL_CreateThread(gameEvents,NULL);

Upvotes: 0

Views: 1920

Answers (2)

genpfault
genpfault

Reputation: 52166

Change gameEvents() to static. Otherwise your member function will have a "hidden" first argument for the this pointer that C APIs like SDL don't know about.

If you need access to instance data do something like this:

static int mainGame::gameEvents(void *ptr)
{
   mainGame* game = (mainGame*)ptr;
   //do things here.
   return 0;
}

...

mainGame game;
SDL_Thread* gh;  
gh = SDL_CreateThread( mainGame::gameEvents, &game );

Upvotes: 1

Nikos C.
Nikos C.

Reputation: 51920

Since you're using C++, you need to declare your function with C linkage, since that's what SDL expects, being a C library itself:

extern "C" int gameEvents(void *ptr);

Upvotes: 3

Related Questions