elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Cómo detengo un Thread?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo detengo un Thread?  (Leído 2,257 veces)
Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
¿Cómo detengo un Thread?
« en: 27 Diciembre 2014, 06:55 am »

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í:
Código
  1. #include <iostream>
  2. #include <thread>
  3. #include <Windows.h>
  4.  
  5. using namespace std;
  6.  
  7. void firstfor(int* x2)
  8. {
  9. for(int x = 0; x <= 9999; ++x)
  10. {
  11. *x2 = x;
  12. Sleep(20);
  13. }
  14.  
  15. cout << "\nThis for has finished!" << endl;
  16. }
  17.  
  18. int main(void)
  19. {
  20. int x = 0;
  21. int y = 1;
  22.  
  23. thread funcion1(firstfor, &x);
  24.  
  25. while(1)
  26. {
  27. cout << "Type either '1' or '0': "; cin >> y;
  28.  
  29. if (y == 0)
  30. {
  31.  
  32. break;
  33. }
  34. else if(y == 1)
  35. {
  36. cout << "Currently the 'x' value is: " << x << endl;
  37. Sleep(1000);
  38. }
  39.  
  40. system("cls");
  41. }
  42.  
  43. cin.get();
  44. return 0;
  45. }

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.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ¿Cómo detengo un Thread?
« Respuesta #1 en: 27 Diciembre 2014, 12:58 pm »

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.


« Última modificación: 27 Diciembre 2014, 15:37 pm por ivancea96 » En línea

Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: ¿Cómo detengo un Thread?
« Respuesta #2 en: 27 Diciembre 2014, 17:21 pm »

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í:

Código
  1. #include <iostream>
  2. #include <thread>
  3. #include <Windows.h>
  4.  
  5. using namespace std;
  6.  
  7. bool dThread = false;
  8.  
  9. void firstfor(int* x2)
  10. {
  11. for(int x = 0; x <= 9999; ++x)
  12. {
  13. if(!dThread)
  14. {
  15. *x2 = x;
  16. Sleep(20);
  17. }
  18. else
  19. {
  20. break;
  21. }
  22. }
  23.  
  24. cout << "\nThis for has finished!" << endl;
  25. }
  26.  
  27. int main(void)
  28. {
  29. int x = 0;
  30. int y = 1;
  31.  
  32. thread funcion1(firstfor, &x);
  33.  
  34. while(1)
  35. {
  36. cout << "Type either '1' or '0': "; cin >> y;
  37.  
  38. if (y == 0)
  39. {
  40. dThread = true;
  41. break;
  42. }
  43. else if(y == 1)
  44. {
  45. cout << "Currently the 'x' value is: " << x << endl;
  46. Sleep(1000);
  47. }
  48.  
  49. system("cls");
  50. }
  51.  
  52. funcion1.join();
  53.  
  54. system("pause>nul");
  55. return 0;
  56. }
En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: ¿Cómo detengo un Thread?
« Respuesta #3 en: 2 Enero 2015, 03:27 am »

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
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como detengo un timer « 1 2 »
Programación Visual Basic
CARRY-ON 10 3,399 Último mensaje 5 Abril 2006, 16:08 pm
por Cicklow
#include <thread/AsyncCallback.h> #include <thread/Runnable.h>
GNU/Linux
Codename!! 1 3,117 Último mensaje 18 Agosto 2011, 07:14 am
por Foxy Rider
#include <thread/AsyncCallback.h> #include <thread/Runnable.h>
Programación C/C++
Codename!! 0 2,301 Último mensaje 15 Agosto 2011, 21:31 pm
por Codename!!
Como puedo crear este thread?
.NET (C#, VB.NET, ASP)
Eleкtro 6 4,874 Último mensaje 29 Noviembre 2012, 00:27 am
por Eleкtro
Como eliminar un thread del foro?
Sugerencias y dudas sobre el Foro
Schaiden 3 11,709 Último mensaje 6 Julio 2017, 01:19 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines