如何在C ++中的新线程中运行非静态函数

die*_*rod 0 c++ multithreading class non-static

我正在尝试用C ++编写基本的游戏代码。我有一个名为player的类,具有一个名为moveLeft()的函数它会持续监视我要在单独线程中运行的“ a”获取。

以我认为的方式来称呼它。我现在知道这是因为它是一个非静态函数,但是我不确定现在如何执行此操作。我正在使用<thread>库。

玩家等级

#pragma once
class player
{
    public:
        player(); // Constructor
        ~player(); // Destructor

        void moveLeft();
        void moveRight();
        void jump(double);

        int getHealth();

        double get_x_position();
        double get_y_position();

        double get_x_momentum();
        double get_y_momentum();

        bool getGrounded();

        void setHealth(int);

        void set_x_position(double);
        void set_y_position(double);

        void set_x_momentum(double);
        void set_y_momentum(double);

        void setGrounded(bool);

    private:
        int health;

        bool grounded;

        double x_position;
        double y_position;

        double x_momentum;
        double y_momentum;
};
Run Code Online (Sandbox Code Playgroud)

moveLeft()函数

void player::moveLeft()
{
    while (true)
    {
        while (GetKeyState(97))
        {
            if (grounded)
            {
                x_momentum -= .01;
            }
            else
            {
                x_momentum -= 0.07;
            }

            x_position += x_momentum;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我以为我应该设置它。

thread t1(&player::moveLeft);
t1.detach();
Run Code Online (Sandbox Code Playgroud)

Pli*_*der 5

如果要从类的成员函数启动线程,则可能正在寻找

thread t1(&player::moveLeft, this);
t1.detach();
Run Code Online (Sandbox Code Playgroud)

包含this指针的原因是每个成员函数都有一个隐藏的参数,即与之关联的对象的指针。this上面的代码中是一个player*。当然,您可以使用其他任何指针player,而不必使用this。无论您指向什么对象,成员函数都会在其体内将其视为“此对象”。

  • 那么您是从静态成员函数启动线程吗?这些函数看不到“ this”指针,它们就像类命名空间中的全局函数。这样行不通。您可能需要重新评估程序架构。 (2认同)