Verán, quisiera saber cómo hago para detener la ejecución de un Thread mediante una condición. O sea que, si se cumple dicha condición detener la ejecución de ese Thread.
Tengo un código así:
#include <iostream>
#include <thread>
#include <Windows.h>
using namespace std;
void firstfor(int* x2)
{
for(int x = 0; x <= 9999; ++x)
{
*x2 = x;
Sleep(20);
}
cout << "\nThis for has finished!" << endl;
}
int main(void)
{
int x = 0;
int y = 1;
thread funcion1(firstfor, &x);
while(1)
{
cout << "Type either '1' or '0': "; cin >> y;
if (y == 0)
{
break;
}
else if(y == 1)
{
cout << "Currently the 'x' value is: " << x << endl;
Sleep(1000);
}
system("cls");
}
cin.get();
return 0;
}
Básicamente el programa te pide que ingreses ya sea el número 0 o 1 para ver qué valor tiene el valor de la variable 'x' actualmente, ya que dicha valor se está aumentado en un proceso diferente. Pero quiero saber cómo hacer para detener ese thread cuando el usuario ingrese el valor 0.
Puedes mandarle al thread la dirección de una variable del main (bool, por ejemplo), y que cuando la variable sea false, retorne.
Por lo demás, no me parece productivo cerrar un thread de golpe, en caso de que se pueda.
Hehe gracias. :) Utilicé una variable booleana global para reconocer lo que había ingresado por teclado y tomar la decisión del for. Me quedó así:
#include <iostream>
#include <thread>
#include <Windows.h>
using namespace std;
bool dThread = false;
void firstfor(int* x2)
{
for(int x = 0; x <= 9999; ++x)
{
if(!dThread)
{
*x2 = x;
Sleep(20);
}
else
{
break;
}
}
cout << "\nThis for has finished!" << endl;
}
int main(void)
{
int x = 0;
int y = 1;
thread funcion1(firstfor, &x);
while(1)
{
cout << "Type either '1' or '0': "; cin >> y;
if (y == 0)
{
dThread = true;
break;
}
else if(y == 1)
{
cout << "Currently the 'x' value is: " << x << endl;
Sleep(1000);
}
system("cls");
}
funcion1.join();
system("pause>nul");
return 0;
}
Si estas en Windows puedes hacer uso de las API's: SuspendThread/ResumeThread para pausar y/o resumir un hilo asi como TerminateThread para causar su terminacion.
Saludos