线程是我们在编程中逃不开的话题,无论 java 、c# 还是 go 各种语言都有自己一套支持并发编程的支持。今天我们就来简单了解一下如何在 c++ 中创建thread
以及使用thread
。
#include <iostream>
#include <thread>
static bool is_Finished = false;
void do_work()
{
while (!is_Finished)
{
std::cout << "working...\n";
}
}
int main(int argc, char const *argv[])
{
std::thread worker(do_work);
std::cin.get();
is_Finished = true;
worker.join();
std::cin.get();
}
- 引入
thread
库,调用std::thead
创建一个 worker 线程,然后传入一个函数do_worker
在此线程中运行。 - std::cin.get() 这个函数我们一直在用,还没有解释过他的作用,作用是当程序之行到此会阻止线程执行等待用户输入回车后退出。
-
worker.join()
,在线程中执行表示让主线等待worker
执行完,在继续在主线程执行,有了 join 我们主线就会等待worker
线程执行完毕后再继续执行。以免worker
没有执行完就退出了。 - 这里在
worker
线程中循环执行输出working..
知道我们输入回车在退出线程。
void do_work()
{
using namespace std::literals::chrono_literals;
while (!is_Finished)
{
std::cout << "working...\n";
std::this_thread::sleep_for(1s);
}
}
std::this_thread::sleep_for(1s);
可以让thread
休眠 1 秒钟
g++ -std=c++14 thread1.cpp -o thread1
void do_work()
{
using namespace std::literals::chrono_literals;
std::cout << "started thread id = " << std::this_thread::get_id() << std::endl;
while (!is_Finished)
{
std::cout << "working...\n";
std::this_thread::sleep_for(1s);
}
}
std::cout << "started thread id = " << std::this_thread::get_id() << std::endl;
```
输出 thread 的 id。
网友评论