c++ - 在非静态成员函数上使用 C++ 11 多线程

标签 c++ multithreading networking

所以,我的问题是:

  • 我有一个名为 NetworkInterface 的类,它是使用 RakNet 网络库构建的。
  • 它包含一个使用 RakNet 用来发送和接收数据的 while 循环的方法。

现在,我将 NetworkInterface 类设为单例,因为我希望它在我编写的游戏中只存在一次。

但是,如果我只是用 while 循环调用该方法,它会停止我的整个 gqme,所以这就是为什么我希望它在不同的线程上运行,这样它就不会干扰游戏机制。 现在,我使用 std::thread 对象在不同线程上启动 NetworkInterface 中的方法,但它抛出 C3867 错误,指出该方法需要是静态的或某种(我已经在谷歌上找到了)但我不知道我不知道如何解决这个问题,因为我在该方法中使用的变量也不能是静态的。

我希望这是清楚的。简而言之,我将如何在程序的单独线程中实现类的非静态方法。或者,还有更好的方法? (如果弹出,我不想使用 Boost 库)

最佳答案

你需要提供一个对象让你调用非静态成员函数,就像你不能调用method()一样在其自己的。要提供该对象,请将其传递给 std::thread在放置函数的参数之后的构造函数。

struct Test {
    void func(int x) {}
};


int main() {
    Test x;
    std::thread t(&Test::func, &x, 42);
    t.join();
}

LIVE EXAMPLE

注意我已经通过了 &x .这是因为非静态类函数接受一个指向调用它的对象的指针,这个指针是 this。指针。其余的,即42 , 是与带有 42 的方法参数声明相对应的参数恰逢int x在示例中。

关于c++ - 在非静态成员函数上使用 C++ 11 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657770/

相关文章:

Python:具有无限循环的控制台,超出堆栈空间

java - 为什么在http请求中编码?

c++ - 使用 select() 函数改进服务器

c++ - 从 void 子函数检索 int 值到 C++ 中的函数

C++ 错误 : Free() invalid next size (fast)

python - 与线程一起使用时,使用 pywinauto.top_window() 会挂起

multithreading - 在自己的线程中将数据写入 TcpSocket

java - 如何在 Java 中高效地构建应用程序网络

c++ - C++开发中使用Valgrind?

c++ - 渲染到帧缓冲区/纹理显示为空