[C con Clase] Terminar programa al pulsar tecla escape.

Jorge Vega Sanchez memmaker650 en gmail.com
Mar Ago 31 21:15:15 CEST 2010


¿¿ Y porque si lo pongo en un hilo cerrara el programa completo ???

Es que no entiendo tu respuesta.
El 31/08/2010, a las 21:10, David Fire escribió:

> pone el getch() en otro thread
> 
> El 31 de agosto de 2010 16:07, Jorge Vega Sanchez <memmaker650 en gmail.com> escribió:
> Busque algo sobre algun port de knhit a linux y encontre lo siguiente:
> En este enlace hay varias cosas.
> 
> #include <stdio.h>
> #include <termios.h>
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/time.h>
> 
> void changemode(int);
> int  kbhit(void);
> int main(void)
> {
>   
>   changemode(1);
>   while ( !kbhit() )
>   {	// Funciona sin introducir caracteres.
>   }
> 
>   sleep(20);
> 	
>   
>   return 0;
> }
> 
> void changemode(int dir)
> {
>   static struct termios oldt, newt;
> 
>   if ( dir == 1 )
>   {
>     tcgetattr( STDIN_FILENO, &oldt);
>     newt = oldt;
>     newt.c_lflag &= ~( ICANON | ECHO );
>     tcsetattr( STDIN_FILENO, TCSANOW, &newt);
>   }
>   else
>     tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
> }
> 
> int kbhit (void)
> {
>   struct timeval tv;
>   fd_set rdfs;
>   int ch=0,retorno;
> 
>   tv.tv_sec = 0;
>   tv.tv_usec = 0;
> 
>   FD_ZERO(&rdfs);
>   FD_SET (STDIN_FILENO, &rdfs);
> 
>   select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
>   
>   ch = getchar();
> 
>   printf("Got %c \n", ch);
>   printf("En ASCII\n");
>   printf("tenemos %d\n", ch);
>   
>   printf("Caracteres raros: %d\n", FD_ISSET(STDIN_FILENO, &rdfs));
>   if(ch!=27)
>   	 retorno=FD_ISSET(STDIN_FILENO, &rdfs);
>   else
>   {
>   	changemode(0);
>   	return 0;
>   }
>   
>   return retorno;
> 
> }
> 
> 
> Con este código consigo que detecte que hemos pulsado la tecla escape en mi caso (si se pulsa cualquier otra no pasa nada. El problema es que no termina el programa hasta que se cumple el Sleep y se deberia de terminar el programa cuando pulse ESCAPE.
> 
> Por si alguien le echa un vistazo, el código es partiendo del código de THANTOS pero modificado.
> 
> Queda poco para la solucion final pero no consigo el punto que falta.
> 
> El 30/08/2010, a las 00:55, David Fire escribió:
> 
>> SI se puede hacer con c/c++ estandar
>> tenes q usar kbhit y getch
>> kbhit te dice si hay alguna tecla esperando para ser leida y getch te da ese caracter.
>> 
>> if(kbhit()){
>>   c=getch();
>>   if(c=ESC)
>>     exit();
>> }
>> 
>> saludos
>> David
>> 
>> El 29 de agosto de 2010 16:05, Jorge Vega Sanchez <memmaker650 en gmail.com> escribió:
>> Y que librería puedo usar para hacer esto.
>> El 29/08/2010, a las 18:15, Pedro Rodríguez González escribió:
>> 
>>> Usando la librería estándar de C/C++ ? Creo que no vas a poder.
>>> 
>>> > From: memmaker650 en gmail.com
>>> > Date: Sun, 29 Aug 2010 10:52:37 +0200
>>> > To: cconclase en listas.conclase.net
>>> > Subject: [C con Clase] Terminar programa al pulsar tecla escape.
>>> > 
>>> > Buenas.
>>> > 
>>> > Estoy haciendo un programa de linea de comandos. Me gustaría saber como hacer que al pulsar la tecla escape se termine el programa.
>>> > Mi duda es como detectar el pulsado de la tecla ESC (en linux o MAC, no en Windows) y si es imprescindible tener un bucle global que compruebe el pulsado de la tecla o hay alguna otra forma más eficiente.
>>> > 
>>> > El programa va soltando soluciones o datos y no sé como mezclar esto con la deteccion de la tecla esc.
>>> > 
>>> > Gracias de antemano.
>>> > _______________________________________________
>>> > Lista de correo Cconclase Cconclase en listas.conclase.net
>>> > http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>>> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>> _______________________________________________
>>> Lista de correo Cconclase Cconclase en listas.conclase.net
>>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>> 
>> 
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>> 
>> 
>> 
>> -- 
>>  (\__/) 
>> (='.'=)This is Bunny. Copy and paste bunny into your 
>> (")_(")signature to help him gain world domination. 
>> 
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> 
> 
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> 
> 
> 
> -- 
>  (\__/) 
> (='.'=)This is Bunny. Copy and paste bunny into your 
> (")_(")signature to help him gain world domination. 
> 
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100831/260f7403/attachment.html>


Más información sobre la lista de distribución Cconclase