当在多线程任务中,你需要等待一个线程结束后再进行操作,就可以用thread.joinable()来确保它正在运行,同时用thread.join()来等待线程结束并清理它的资源(这个会block跑这个函数的进程/线程,在这里就是会block这个stopThread函数的进程/线程),例子如下:

1
2
3
4
5
6
7
8
9
10
#include <thread>

int stopThread()
{
// assume threre is a running thread threadA
if (threadA.joinable()) // check if threadA is running
{
threadA.join(); // join threadA. It waits and blocks the calling thread and waits until threadA finishes. It will also clear all the resourses used by threadA in the end.
}
}

我之前被“join”这个名字所误导,以为它是开始线程或什么,后来发现它之所以不用“stop”这类想表达的意思就是,几个线程汇合到一起,而不是强制停止某一个线程,这样想来还是很合理的,希望有所帮助。