精准客户营销,seo服务公司招聘,场所码小程序怎么做,辽宁省建设厅投诉网站简单的来说#xff0c;join ()方法建立的线程具有阻碍作用#xff0c;该线程不结束#xff0c;另一些函数就无法运行。detach ()方法建立的线程#xff0c;可以和另一些函数同时进行。下面以示例进行详细说明#xff0c;以帮助大家理解和使用。 目录 join ()detach () jo…简单的来说join ()方法建立的线程具有阻碍作用该线程不结束另一些函数就无法运行。detach ()方法建立的线程可以和另一些函数同时进行。下面以示例进行详细说明以帮助大家理解和使用。 目录 join ()detach () join ()
join 方法用于等待线程结束。当一个线程对象调用 join 方法时当前线程将阻塞直到该线程对象所代表的线程结束。如果该线程对象所代表的线程已经处于结束状态则 join 方法立即返回。注意如果一个线程对象被析构也就是离开其作用域而该线程对象所代表的线程仍在运行程序将终止。
以下是一个 join 的示例
#include iostream
#include threadvoid threadFunction() {std::cout Hello from the thread!\n;
}int main() {int i 3;while (i) {std::thread t(threadFunction); // 创建一个新线程t 是该线程的对象t.join(); // 等待新线程结束std::cout Hello from the main thread!\n;i--;}return 0;
}输出
Hello from the thread!
Hello from the main thread!
Hello from the thread!
Hello from the main thread!
Hello from the thread!
Hello from the main thread!在这个例子中先建立一个while循环执行三次主程序中内容。程序首先创建一个新线程并开始运行 threadFunction。然后主线程调用 t.join()这将阻塞主线程直到新线程结束。当新线程结束时主线程将继续执行输出 “Hello from the main thread!”。 从输出结果中可以看出主程序输出和线程输出有着先后顺序与原理一致。
detach ()
在C中std::thread::detach()函数用于将线程“分离”出当前对象。当一个线程对象调用detach()方法时该线程对象将不再与该线程有任何关联。一旦线程分离出来它将独立运行直到完成。注意一旦线程完成系统会自动回收其资源。
下面是一个使用std::thread::detach()函数的示例
#include iostream
#include threadvoid threadFunction() {while (1){std::cout Hello from the thread!\n;}}int main() {int i 3;while (i) {std::thread t(threadFunction); // 创建一个新线程t 是该线程的对象t.detach(); // 将新线程分离出去它将继续运行直到完成std::cout Hello from the main thread!\n; // 这会立即输出不会等待新线程结束i--;}return 0;
}输出
Hello from the main thread!
Hello from the main thread!
Hello from the main thread!
Hello from the thread!
Hello from the thread!
Hello from the thread!
Hello from the thread!在这个例子中也是先用一个while循环。从输出的结果可以看出与join的有序性不同建立的线程和主线程是在同时进行的。
需要注意的是一旦线程被分离出去它就不再受原线程的控制和影响。因此无法通过原线程来获取该线程的执行结果或等待其结束。如果需要等待线程执行完毕后再继续执行其他操作可以使用 join() 方法来阻塞等待线程结束。