gpt4 book ai didi

c++ - 没有对 'pthread_create' 的匹配函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:29 24 4
gpt4 key购买 nike

我正在使用 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
// ...
}

但是 Xcode 给我错误:“没有匹配的函数调用‘pthread_create’”。我不知道,因为我已经包含了 pthread.h

怎么了?

谢谢!

最佳答案

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

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

例如:

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

关于c++ - 没有对 'pthread_create' 的匹配函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10389384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com