无法使用SDL线程

时间:2012-11-02 15:56:04

标签: c++ multithreading sdl

我正在使用带有SDL的Visual Studio 2012,我正在做一个简单的线程任务,但我总是遇到这些错误:

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

我得到的另一个错误:

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

这就是函数的编写方式:

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

这是我用来调用函数的代码:

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

2 个答案:

答案 0 :(得分:3)

由于你正在使用C ++,你需要使用C链接声明你的函数,因为这是SDL期望的,它本身就是一个C库:

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

答案 1 :(得分:1)

gameEvents()更改为static。否则,您的成员函数将具有this指针的“隐藏”第一个参数,而SDL之类的C API并不知道。

如果您需要访问实例数据,请执行以下操作:

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 );