1, ожидая завершения выполнения потока
Метод Join () будет блокировать несколько основного потока , пока вызов нити цели не будет завершен, что присоединиться будет выполнять функции тела части дочернего потока непосредственно.
2, подвешенная нить (нить сна)
使用 станд :: this_thread :: sleep_for 或 станд :: this_thread :: sleep_until.
#include <нить> #include <iostream> #include <хроно> с использованием пространства имен зЬй :: хронографа; недействительным pausable () { // сон 500毫秒 станд :: this_thread :: sleep_for (миллисекунды ( 500 )); // сон到指定时间点 станд :: this_thread :: sleep_until (system_clock :: сейчас () + миллисекунды ( 500 )); } INT основных () { станд :: резьба резьба (pausable); Thread.join (); вернуться 0 ; }
3, окончание резьбы
Обычно, когда выполнение функции поток завершается, поток «естественный» стоп. Но есть ситуация вызовет аварийное завершение потоков в станде :: нити, то это: деструктор. Когда станд :: нить экземпляр деструктор, если поток все еще работает, поток будет вынужден прекратить обмен, что может вызвать утечку ресурсов, поэтому постарайтесь, чтобы присоединиться к нему, прежде чем деструктор для обеспечения успешного завершения потока.
4, нить копия
станд :: нить (Foo);
станд :: нить б;
б = а;
Чтобы дать б нити, то управление потоками уже не б, если оригинал имеет резьбу, нить оригинала разрушается, новое управление потоками.
5, суб-нить разделения
открепление ( позже) потеряло право собственности на нити не может присоединиться к звонку, потому что поток был отделен, больше не принадлежит , например трубе. Для того, чтобы определить , есть ли какая - нить простого способа владения нити заключается в вызов объединяемой функция возвращает истину , если есть в противном случае нет.
# include <нить> #include <iostream> использованием пространства имен станд; // 一个普通的函数аннулируются весело ( INT Num) { соиЬ << " Функция ребенок нить начать ... \ п " ; соиЬ << " Я из функции развлечения (): " << Num << ' \ п ' ; соиЬ << « Конец функции дочернего потока ... \ п » ; соиЬ << епсИ; { общественности : недействительным оператор () ( INT Num) { соиЬ << " Дочерний класс резьбы начинаются ... \ п " ; соиЬ << " Я родом из класса Fun: " << Num << ' \ п ' ; соиЬ << « Конец нити класса ребенок ... \ п » ; соиЬ << епсИ; } }; ИНТ основной () { соиЬ << " Главная нить начать ...« \ N » ; cout.sync_with_stdio ( истина ); // установить входной поток соиЬ поточно Thread T_l (Забава, 1. ); // создать новый поток, то первый параметр является указателем на функцию, то второй параметр является функцией параметр (второй параметр является переменным параметром длины) t_1.join (); // войти в число методов блоков вызывающий поток , пока цель основной поток не будет завершено, т.е. выполняет прямую функцию может присоединиться к корпусной части суб-нити резьбы T_2 (прикольных, 2 ); t_2.detach (); // метод открепление не блокирует поток, целевой поток стал демон поток, житель работает в фоновом режиме Fun oFun; нить t_3 ( исх (oFun), 3 ); // здесь Новая нить используется для инициализации объекта, то передается сама oFun реф , а не его копия t_3.join (); COUT << "Главный конец нити ... " << епсИ; вернуть 0 ; }