使用c++ 11多线程处理非静态成员函数
Using c++ 11 multithreading on non-static member function
所以,我的问题是:
- 我有一个叫做NetworkInterface的类,它是使用RakNet网络库构建的。
- 它持有一个方法,使用while循环,RakNet使用发送和接收数据。
现在,我将NetworkInterface类设置为单例,因为我希望它在我编写的游戏中只存在一次。
但是,如果我只是用while循环调用方法,它会停止我的整个游戏,所以这就是为什么我想让它在不同的线程上运行,这样它就不会干扰游戏机制。现在,我使用std::thread对象在不同的线程上启动NetworkInterface中的方法,但它抛出C3867错误,该错误指出该方法需要是静态的或某种类型(我已经在Google上找到了这个),但我不知道如何修复这个问题,因为我有在该方法中使用的变量也不能是静态的。
我希望这是清楚的。简而言之,我将如何在程序的单独线程中从类实现非静态方法。还是有更好的办法?(我不想使用Boost库,如果弹出)
您需要提供一个对象来调用非静态成员函数,就像您不能单独调用method()
一样。要提供该对象,请将其传递给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
一致。
相关文章:
- 如何在C++中使用非静态成员函数作为回调函数
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 为什么传递非静态成员函数会导致编译错误?
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 非静态成员函数的 decltype 格式不正确吗?
- std::异步与非静态成员函数
- C++无效使用非静态成员函数?
- 未使用的C++未优化的静态成员函数/变量
- C++:如何返回指向非静态成员函数的指针?
- 使用静态成员函数而不是普通函数是否有任何开销?
- 在 stream_descriptor::async_wait 中无效使用非静态成员函数
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- 无法在clang Linux中分配非静态成员函数,但我可以在Visual Studio Windows中分配
- 在类定义中推导内联静态成员函数的返回类型
- `enable_if()`以禁用模板化类的静态成员函数声明
- 错误:无效使用非静态成员函数"int test::hotplug_callback(libusb_contex
- 常量静态成员函数
- 使用 vector.sort() 的非静态成员函数无效使用
- 从静态成员函数访问私有非静态类变量 - C++