c++ - SDL2线程在类里面不工作

标签 c++ multithreading class pointers sdl-2

我正在尝试使用 SDL2 库的多线程创建输入处理程序;然而,当我尝试将一个线程放入一个类中时,它不会编译并给我这个错误...

error: cannot convert 'inputHandlerClass::getInput' from type 'int (inputHandlerClass::)(void*)' to type 'SDL_ThreadFunction {aka int (*)(void*)}'

我很确定这是我将函数名称 (fn) 传递给 SDL_CreateThread 函数的方式。

这是source.cpp文件

#include <iostream>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include <SDL_thread.h>
#include <SDL_mixer.h>
#include "..\include\gameClass.hpp"
#include "..\include\inputHandlerClass.hpp"

int main(int argc, char *argv[]){
    inputHandlerClass inputHandler;
    inputHandler.startThread();
    std::cout << "hello world";
    return 0;
}

这是inputHandlerClass.hpp

#include <SDL_thread.h>
#include <iostream>

class inputHandlerClass{
    private:
        SDL_Thread *thread;
        int threadReturnValue;
    public:
        inputHandlerClass();
        int getInput(void *ptr);
        void startThread();
};

//Default Constructor
inputHandlerClass::inputHandlerClass(){
    this->thread = SDL_CreateThread(getInput, "inputThread", this);
}

int inputHandlerClass::getInput(void *ptr){
    int cnt;
    for(cnt= 0; cnt < 10; ++cnt){
        std::cout << "counter: " << cnt << std::endl;
        SDL_Delay(50);
    }
    return cnt;
}

void inputHandlerClass::startThread(){
    SDL_WaitThread(this->thread, &this->threadReturnValue);
}

最佳答案

SDL_CreateThread 需要一个指向带有 int(void *ptr) 签名的常规函数​​的指针作为第一个参数,但是您提供的是非静态成员函数(甚至不是一个指针,因为成员函数没有隐式转换为指针)。您应该将 getInput 重新声明为静态。 this 指针将作为 ptr 提供。

关于c++ - SDL2线程在类里面不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43456750/

相关文章:

python - 如何在 LinuxOS 中从 python 脚本运行/停止 c 程序?

java - Java EE 中的长期线程

java - 使用java运行风扇

c# - 使用 Code-First EF 在 ASP.net MVC3 中实现多线程

python - 我不明白为什么我会收到 AttributeError

c++ - G++未定义对类::函数的引用

Javascript 对象数组 - 自杀式破坏

c++ - C++ 的 LLVM 替代方案(字节码生成)

c++ - C++语言将字符转换为整数

C++ 在 while 循环中使用 switch 时输出相同