gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:31:08 24 4
gpt4 key购买 nike

我正在尝试用 C++ 编写一个基本游戏。我有一个名为 player 的类,它有一个名为 moveLeft(); 的函数,它不断监视我想在单独线程中运行的“a”get。

按照我认为应该的方式调用它。我现在明白这是因为它是一个非静态函数,但我不确定现在该怎么做。我正在使用 库。

播放器类

#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;
};

向左移动() 函数

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

x_position += x_momentum;
}
}
}

我认为我应该如何设置它。

thread t1(&player::moveLeft);
t1.detach();

最佳答案

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

thread t1(&player::moveLeft, this);
t1.detach();

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

关于c++ - 如何在 C++ 中的新线程中运行非静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52285964/

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