c++11之后支持了多线程编程。在 C++11 中我们可以通过创建 std::thread 对象来创建新的线程。每个 std::thread 对象都可以与一个线程相关联。
给 std::thread 对象添加函数,std::thread thObj();这个回调函数将在这个新线程启动时执行。这些回调可以是:
- 函数指针
- 函数对象
- Lambda函数
使用函数指针创建线程
#include <iostream>
#include <thread>
using namespace std;
void thread_function()
{
for (int i = 0; i < 10; i++)
{
cout << "Thread function executing!" << endl;
}
}
int main()
{
std::thread threadObj(thread_function);
for (int i = 0; i < 10; i++)
{
cout << "MainThread executing!" << endl;
}
threadObj.join();//等到子线程结束,主线程再结束
cout << "EXIT!!" << endl;
system("pause");
return 0;
使用函数对象创建线程
#include <iostream>
#include <thread>
using namespace std;
class DisplayThread
{
public:
void operator()()
{
for (int i = 0; i < 10; i++)
{
cout << "Thread function executing!" << endl;
}
}
};
int main()
{
thread threadObj((DisplayThread()));
for (int i = 0; i < 10; i++)
{
cout << "MainThread executing!" << endl;
}
threadObj.join();//等到子线程结束,主线程再结束
cout << "EXIT!!" << endl;
system("pause");
return 0;
}
使用 Lambda 函数创建线程
#include <iostream>
#include <thread>
using namespace std;
int main()
{
thread threadObj([] {
for (int i = 0; i < 10; i++)
{
cout << "Thread function executing!" << endl;
}});
for (int i = 0; i < 10; i++)
{
cout << "MainThread executing!" << endl;
}
threadObj.join();//等到子线程结束,主线程再结束
cout << "EXIT!!" << endl;
system("pause");
return 0;
}
如何区分线程
每个 std::thread 对象都有一个 ID,使用下面的函数可以获取:
std::thread::get_id()
获取当前线程的 ID:
std::this_thread::get_id()
#include <iostream>
#include <thread>
using namespace std;
void thread_function()
{
cout << "Inside Thread :: ID = " << this_thread::get_id() << endl;
}
int main()
{
thread threadObj1(thread_function);
thread threadObj2(thread_function);
if (threadObj1.get_id() != threadObj2.get_id())
{
cout << "Both Threads have different IDs!" << endl;
}
cout << "From main Thread :: ID of threadObj1 is " << threadObj1.get_id() << endl;
cout << "From main Thread :: ID of threadObj2 is " << threadObj2.get_id() << endl;
threadObj1.join();
threadObj2.join();//等到子线程结束,主线程再结束
cout << "EXIT!!" << endl;
system("pause");
return 0;
}
————————————————
转载自:https://blog.youkuaiyun.com/weixin_42579072/article/details/103021724