Thread::joinable es una función integrada en C++ std::thread. Es una función de observador, lo que significa que observa un estado y luego devuelve la salida correspondiente y verifica si el objeto del hilo se puede unir o no.
Se dice que un objeto de subproceso se puede unir si identifica/representa un subproceso de ejecución activo.
Un hilo no se puede unir si:
- Fue construido por defecto
- Si alguno de sus miembros unirse o separarse ha sido llamado
- Se ha movido a otro lugar
Sintaxis:
std::thread::joinable()
Parámetros: Esta función no acepta ningún parámetro.
Valor de retorno: es una función de tipo booleano y devuelve verdadero cuando el objeto del hilo se puede
unir. Devuelve falso si el objeto del hilo no se puede unir.
El siguiente programa demuestra el uso de std::thread::joinable()
Nota: En el IDE en línea, este programa mostrará un error. Para compilar esto, use el indicador “-pthread” en la compilación de los compiladores g++ con la ayuda del comando “g++ –std=c++14 -pthread file.cpp” .
// C++ program to demonstrate the use of // std::thread::joinable() #include <chrono> #include <iostream> #include <thread> using namespace std; // function to put thread to sleep void threadFunc() { std::this_thread::sleep_for( std::chrono::seconds(1)); } int main() { std::thread t1; // declaring the thread cout << "t1 joinable when default created? \n"; // checking if it is joinable if (t1.joinable()) cout << "YES\n"; else cout << "NO\n"; // calling the function threadFunc // to put thread to sleep t1 = std::thread(threadFunc); cout << "t1 joinable when put to sleep? \n"; // checking if t1 is joinable if (t1.joinable()) cout << "YES\n"; else cout << "NO\n"; // joining t1 t1.join(); // checking joinablity of t1 after calling join() cout << "t1 joinable after join is called? \n"; if (t1.joinable()) cout << "YES\n"; else cout << "NO\n"; return 0; }
Producción:
t1 joinable when default created? NO t1 joinable when put to sleep? YES t1 joinable after join is called? NO
Nota: La tercera salida aparecerá 1 segundo más tarde porque el subproceso se puso en reposo durante 1 minuto.
Publicación traducida automáticamente
Artículo escrito por Kushagra7744 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA