• Sábado 14 de Diciembre de 2024, 19:56

Autor Tema:  Detener Un Programa C Pulsando Una Tecla  (Leído 4912 veces)

ivan821

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Detener Un Programa C Pulsando Una Tecla
« en: Martes 13 de Noviembre de 2007, 21:56 »
0
Hola mi problema es que quiero detener el programa en ejecucion en c,pulsando una tecla cuando yo quiera.Usando las funciones scanf,getch,getchar,para detectar las teclas el programa queda detenido,me gustaria poder crear una funcion que me devolviera un entero si se pulsa una tecla e ir llamando a esta funcion en determinados momentos dentro de mi programa.¿Como puedo conseguir esto?.
Muchas gracias a todos.

ivan4joel@hotmail.com

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Detener Un Programa C Pulsando Una Tecla
« Respuesta #1 en: Miércoles 14 de Noviembre de 2007, 11:58 »
0
Pues tienes varias posibilidades...

Hacer tu programa de forma cíclica con un bucle while(), pon un sleep() al final para que el consumo de CPU no sea muy grande y controla la finalización del programa para evitar fallos como bucles infinitos, además ten en cuenta cómo realizas tu programa pues normalmente los programas son secuenciales y tú necesitas realizarlo de forma cíclica, es como programar un PLC (programmable logic controller) que se usa habitualmente para control de procesos en la industria.
La otra solución un poco más avanzada es usar un hilo (multiproceso) que se encargue de mirar si has pulsado una tecla mediante un evento del sistema operativo o de forma menos "bonita" haciendo que el hilo se ejecute de forma cíclica y en paralelo al proceso principal, aunque si eres capaz de lanzar hilos creo que serás capaz de atrapar eventos de tipo keyboard...

un ejemplo:

Código: Text
  1.  
  2. do
  3. {
  4. ...
  5. if(kbhit())
  6. c=getch();
  7. sleep(0);
  8. }while(c!='p');
  9.  
  10.  

donde están los puntos suspensivos añades tu código, la función kbhit() te devuelve un 1 en caso de que se haya pulsado una tecla, en ese caso miras qué tecla se ha pulsado, y haces lo que tengas que hacer...  No tengo muy claro si kbhit() es dependiente del SO... Seguro que alguno de los foreros nos puede sacar de dudas... :whistling:

Un saludo.
 :lightsabre:
No hay tonto más molesto que el ingenioso.