C ++ 11 многопоточного --- резьбовой операция

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 ; 
}

 

рекомендация

отwww.cnblogs.com/lovebay/p/11579618.html