Subproceso que se puede unir() en C++

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *