天天看點

C++多線程Thread——特殊構造情況

在研究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