C++11創建線程的幾種方式


普通方式

void thread_proc()
{
    cout << "thread id = " << this_thread::get_id() << endl;
}

void m1()
{
    thread td(thread_proc);
    td.join();
}

Lambda表達式

void m2()
{
    thread td([](int a, int b)
    {
        cout << a << "+" << b << "=" << a + b << endl;
    }, 1, 2);
    td.join();
}

仿函數

struct functor 
{
    void operator() (int a, int b) 
    {
        cout << a << "+" << b << "=" << a + b << endl;
    }
};

void m3()
{
    thread td(functor(), 3, 2);
    td.join();
}

綁定對象

class CItem
{
    int data_;
public:
    CItem(int data) : data_(data) 
    {
    }
    void member_func()
    {
        cout << "this->data_ = " << this->data_ << endl;
    }
};

void m4()
{
    CItem obj(10);
    thread td(bind(&CItem::member_func, &obj));
    td.join();
}

成員方法

void m5()
{
    CItem obj(10);
    thread td(&CItem::member_func, &obj);
    td.join();
}

Lambda表達式成員方法

void m6()
{
    CItem obj(10);
    thread td([&obj](){
        obj.member_func();
    });
    td.join();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM