C++ STL 建立執行緒的三種方式
阿新 • • 發佈:2018-11-23
使用 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;
}