C++多线程Thread——特殊构造情况

来源:互联网 发布:淘宝潘多拉哪家是正品 编辑:程序博客网 时间:2024/06/04 00:59

在研究orbSlam2 的工程中遇到了一种比较奇怪的构造线程的方式。

伪代码如下:

std::thread* mptLocalMapping;class LocalMapping{    void localMapping::Run()   //这个函数是没有输入参数的    {        //各种操作    }    };LocalMapping* mpLocalMapper = new LocalMapping();mptLocalMapping = new thread(&LocalMapping::Run,mpLocalMapper);

可以看到这里的thread是传入了一个成员函数指针,在这种情况下,其后传入的首个参数必须是一个特定的对象,这个对象是定义了(或引用,或指向对象的指针)这个成员函数。
在这个例子中,thread(&fn, arg1,arg2,…)中的arg1的类型必须是LocalMapping 或者LocalMapping& 或者LocalMapping*

参考:http://www.cplusplus.com/reference/thread/thread/thread/
http://en.cppreference.com/w/cpp/thread/thread/thread