C++ 使用c++;11非静态成员函数上的多线程
所以,我的问题是:C++ 使用c++;11非静态成员函数上的多线程,c++,multithreading,networking,C++,Multithreading,Networking,所以,我的问题是: 我有一个名为NetworkInterface的类,它是使用RakNet网络库构建的 它包含一个使用while循环的方法,RakNet使用while循环发送和接收数据 现在,我将NetworkInterface类设置为单例,因为我希望它在我编写的游戏中只存在一次 但是,如果我用while循环调用该方法,它将停止我的整个gqme,因此thqt就是我希望它在不同线程上运行的原因,这样它就不会干扰游戏机制。 现在,我使用std::thread对象在不同线程的NetworkInte
- 我有一个名为NetworkInterface的类,它是使用RakNet网络库构建的
- 它包含一个使用while循环的方法,RakNet使用while循环发送和接收数据
我希望这是清楚的。简言之,我将如何从程序的一个单独线程中的类实现一个非静态方法。还是有更好的办法?(如果弹出Boost库,我不想使用它)您需要提供一个对象来调用非静态成员函数,就像您不能单独调用
方法()。要提供该对象,请在放置函数的参数之后将其传递给std::thread
的构造函数
struct Test {
void func(int x) {}
};
int main() {
Test x;
std::thread t(&Test::func, &x, 42);
t.join();
}
请注意,我已经通过了&x
。这是因为非静态类函数接受指向调用它的对象的指针,而该指针就是This
指针。其余的参数是42
,它们与方法的参数声明相对应,在示例中42
与int x
重合。我尝试过,但似乎不起作用。目前我有这样一个:UpdatePackages x;std::threadt1(&UpdatePackages::func,&x);t1.join();但我显然不能这么做。这是在持有UpdatePackages类方法的类的构造函数中(很抱歉,我无法更改注释中的格式)@Dries您应该传递This
,而不是创建另一个对象,因为您当然想从This
调用方法,对吗?它将在另一个线程上运行,但其原理与简单地调用方法相同<代码>标准::线程t1(&UpdatePackages::func,this)代码>是的,所以我现在更改了它,唯一的错误是&UpdatePackages::func
。它说,名称后跟::必须是类或命名空间名称
。是否需要包含要使用的内容::func
?