Метод detach
Метод detach класса thread отсоединяет поток
выполнения от объекта thread. После вызова этого метода
объект thread перестает быть связанным с потоком
выполнения, и поток продолжает выполняться независимо.
Метод не принимает параметров и не возвращает значения.
После отсоединения объект thread становится
неприсоединяемым (joinable возвращает false),
и при его разрушении не происходит завершение потока.
Синтаксис
thread.detach()
Пример
Давайте создадим поток, отсоединим его с помощью метода
detach и позволим ему выполняться независимо:
#include <iostream>
#include <thread>
using namespace std;
void func()
{
cout << "Thread is running" << endl;
}
int main()
{
thread t(func);
t.detach();
cout << "Main thread continues" << endl;
this_thread::sleep_for(chrono::milliseconds(100));
return 0;
}
Результат выполнения кода:
"Thread is running"
"Main thread continues"
Пример
Давайте проверим состояние потока до и после вызова
метода detach с помощью метода joinable:
#include <iostream>
#include <thread>
using namespace std;
void func()
{
cout << "Thread executed" << endl;
}
int main()
{
thread t(func);
cout << "Before detach: " << t.joinable() << endl;
t.detach();
cout << "After detach: " << t.joinable() << endl;
this_thread::sleep_for(chrono::milliseconds(100));
return 0;
}
Результат выполнения кода:
"Before detach: 1"
"After detach: 0"
"Thread executed"
Пример
Давайте отсоединим несколько потоков и позволим им выполняться параллельно:
#include <iostream>
#include <thread>
using namespace std;
void print(int num)
{
cout << "Thread " << num << endl;
}
int main()
{
thread t1(print, 1);
thread t2(print, 2);
t1.detach();
t2.detach();
cout << "Main thread" << endl;
this_thread::sleep_for(chrono::milliseconds(100));
return 0;
}
Результат выполнения кода:
"Main thread"
"Thread 1"
"Thread 2"