1. 程式人生 > >C++ STL 建立執行緒的三種方式

C++ STL 建立執行緒的三種方式

使用 stl thread 編寫多執行緒程式時,編譯需要加 -pthread

通過函式指標建立執行緒

#include <iostream>
#include <thread>

using namespace std;

void func(int id, int number)
{
        for(int i=0;i<number;++i)
        {
                cout<<id<<":"<<i<<endl;
        }
}

int main()
{
thread t1(func, 1, 50); thread t2(func, 2, 50); t1.join(); t2.join(); }

通過函式物件建立執行緒

#include <iostream>
#include <thread>

using namespace std;

class Counter
{
public:
        Counter(int id, int number)
                :mId(id), mNumber(number)
        {}

        void
operator()() const { for(int i=0;i<mNumber;++i) {cout<<mId<<":"<<i<<endl;} } private: int mId; int mNumber; }; int main() { // using uniform initialization syntax thread t1{Counter{1,20}}
; // using named variable Counter c(2,30); thread t2(c); // using temporary thread t3(Counter(3,10)); t1.join(); t2.join(); t3.join(); return 0; }

通過成員函式建立物件

#include <iostream>
#include <thread>

using namespace std;

class Test
{
public:
        Test(int id, int number)
                :mId(id), mNumber(number)
        {}

        void func(string arg)
        {
                cout<<arg<<endl;
                for(int i=0;i<mNumber;++i)
                        {cout<<mId<<":"<<i<<endl;}
        }
private:
        int mId;
        int mNumber;
};

int main()
{
        Test test(1, 20);
        thread t{&Test::func, &test, "start"};
        t.join();

        return 0;
}