没有匹配的函数调用'pthread_create'

qwe*_*rtz 4 c++ xcode class pthreads

我正在使用Xcode和C++制作一个简单的游戏.问题是以下代码:

#include <pthread.h>

void *draw(void *pt) {
    // ...
}

void *input(void *pt) {
    // ....
}

void Game::create_threads(void) {
    pthread_t draw_t, input_t;
    pthread_create(&draw_t, NULL, &Game::draw, NULL);   // Error
    pthread_create(&input_t, NULL, &Game::draw, NULL);  // Error
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是Xcode给了我错误:" No matching function call to 'pthread_create'".我不知道'因为我已经包括在内pthread.h.

怎么了?

谢谢!

Tom*_*Tom 8

正如Ken所说,作为线程回调传递的函数必须是(void*)(*)(void*)类型函数.

您仍然可以将此函数作为类函数包含在内,但必须将其声明为static.您可能需要为每种线程类型(例如绘图)使用不同的一种.

例如:

class Game {
   protected:
   void draw(void);
   static void* game_draw_thread_callback(void*);
};

// and in your .cpp file...

void Game::create_threads(void) {
   //  pass the Game instance as the thread callback's user data
   pthread_create(&draw_t, NULL, Game::game_draw_thread_callback, this);
}

static void* Game::game_draw_thread_callback(void *game_ptr) {
   //  I'm a C programmer, sorry for the C cast.
   Game * game = (Game*)game_ptr;

   //  run the method that does the actual drawing,
   //  but now, you're in a thread!
   game->draw();
}
Run Code Online (Sandbox Code Playgroud)