创建一个类对象的线程

时间:2014-01-29 05:06:16

标签: c++ multithreading class

我有类对象Chat *p,我想在其上运行方法Foo(int num)(例如,通常由p -> Foo(3)运行)。 我写了这段代码:

    std::thread F(&Chat::Foo, 4);

但是,它不会编译给我,我也看到错误,因为我无法将p -> Foo放入其中(而不是&Chat::Foo ...)

如何正确运行此代码?

谢谢!

1 个答案:

答案 0 :(得分:1)

对象方法实际工作方式的答案。当您调用p->foo(3)编译器将其翻译成的内容时,粗略地说,Chat::foo(p, 3)P始终作为隐藏参数传递给函数的任何调用。 C ++没有告诉你这个,你实际上不能调用Chat::foo(p, 3),这是不允许的,但它大致是现实中的事情。

任何成员函数中可用的变量this只是作为隐藏的第一个参数传入的地址,并且您在函数中访问的任何成员变量都引用隐藏的第一个参数。所以...为了将任何成员函数作为线程的起点调用,您需要做的是将指针作为第一个参数传递给对象。我相信,std::thread F(&Chat::Foo, p, 4);将正确地启动该线程。