<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">¿¿ Y porque si lo pongo en un hilo cerrara el programa completo ???<div><br></div><div>Es que no entiendo tu respuesta.<br><div><div>El 31/08/2010, a las 21:10, David Fire escribió:</div><br class="Apple-interchange-newline"><blockquote type="cite">pone el getch() en otro thread<br><br><div class="gmail_quote">El 31 de agosto de 2010 16:07, Jorge Vega Sanchez <span dir="ltr"><<a href="mailto:memmaker650@gmail.com">memmaker650@gmail.com</a>></span> escribió:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div style="word-wrap: break-word;">Busque algo sobre algun port de knhit a linux y encontre lo siguiente:<div>

En este enlace hay varias cosas.</div><div><br></div><div><div>#include <stdio.h></div><div>#include <termios.h></div><div>#include <unistd.h></div><div>#include <sys/types.h></div><div>#include <sys/time.h></div>

<div><br></div><div>void changemode(int);</div><div>int  kbhit(void);</div><div>int main(void)</div><div>{</div><div>  </div><div>  changemode(1);</div><div>  while ( !kbhit() )</div><div>  {<span style="white-space: pre-wrap;">   </span>// Funciona sin introducir caracteres.</div>

<div>  }</div><div><br></div><div>  sleep(20);</div><div><span style="white-space: pre-wrap;">      </span></div><div>  </div><div>  return 0;</div><div>}</div><div><br></div><div>void changemode(int dir)</div><div>{</div><div>

  static struct termios oldt, newt;</div><div><br></div><div>  if ( dir == 1 )</div><div>  {</div><div>    tcgetattr( STDIN_FILENO, &oldt);</div><div>    newt = oldt;</div><div>    newt.c_lflag &= ~( ICANON | ECHO );</div>

<div>    tcsetattr( STDIN_FILENO, TCSANOW, &newt);</div><div>  }</div><div>  else</div><div>    tcsetattr( STDIN_FILENO, TCSANOW, &oldt);</div><div>}</div><div><br></div><div>int kbhit (void)</div><div>{</div><div>

  struct timeval tv;</div><div>  fd_set rdfs;</div><div>  int ch=0,retorno;</div><div><br></div><div>  tv.tv_sec = 0;</div><div>  tv.tv_usec = 0;</div><div><br></div><div>  FD_ZERO(&rdfs);</div><div>  FD_SET (STDIN_FILENO, &rdfs);</div>

<div><br></div><div>  select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);</div><div>  </div><div>  ch = getchar();</div><div><br></div><div>  printf("Got %c \n", ch);</div><div>  printf("En ASCII\n");</div>

<div>  printf("tenemos %d\n", ch);</div><div>  </div><div>  printf("Caracteres raros: %d\n", FD_ISSET(STDIN_FILENO, &rdfs));</div><div>  if(ch!=27)</div><div>  <span style="white-space: pre-wrap;">   </span> retorno=FD_ISSET(STDIN_FILENO, &rdfs);</div>

<div>  else</div><div>  {</div><div>  <span style="white-space: pre-wrap;"> </span>changemode(0);</div><div>  <span style="white-space: pre-wrap;">     </span>return 0;</div><div>  }</div><div>  </div><div>  return retorno;</div>

<div><br></div><div>}</div><div><br></div><div><br></div><div>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.</div>

<div><br></div><div>Por si alguien le echa un vistazo, el código es partiendo del código de THANTOS pero modificado.</div><div><br></div><div>Queda poco para la solucion final pero no consigo el punto que falta.</div><div>

<br></div><div><div>El 30/08/2010, a las 00:55, David Fire escribió:</div><div><div></div><div class="h5"><br><blockquote type="cite">SI se puede hacer con c/c++ estandar<div>tenes q usar kbhit y getch</div><div>kbhit te dice si hay alguna tecla esperando para ser leida y getch te da ese caracter.</div>

<div><br></div><div>if(kbhit()){</div><div>  c=getch();</div>

<div>  if(c=ESC)</div><div>    exit();</div><div>}</div><div><br></div><div>saludos</div><div>David</div><div><br><div class="gmail_quote">El 29 de agosto de 2010 16:05, Jorge Vega Sanchez <span dir="ltr"><<a href="mailto:memmaker650@gmail.com" target="_blank">memmaker650@gmail.com</a>></span> escribió:<br>



<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div style="word-wrap: break-word;">Y que librería puedo usar para hacer esto.<br><div><div>

El 29/08/2010, a las 18:15, Pedro Rodríguez González escribió:</div>

<div><div></div><div><br><blockquote type="cite"><span style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; font-size: medium;"><div style="font-size: 10pt; font-family: Tahoma;">



Usando la librería estándar de C/C++ ? Creo que no vas a poder.<br><br>> From:<span> </span><a href="mailto:memmaker650@gmail.com" target="_blank">memmaker650@gmail.com</a><br>> Date: Sun, 29 Aug 2010 10:52:37 +0200<br>



> To:<span> </span><a href="mailto:cconclase@listas.conclase.net" target="_blank">cconclase@listas.conclase.net</a><br>> Subject: [C con Clase] Terminar programa al pulsar tecla escape.<br>><span> </span><br>> Buenas.<br>



><span> </span><br>> Estoy haciendo un programa de linea de comandos. Me gustaría saber como hacer que al pulsar la tecla escape se termine el programa.<br>> 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.<br>



><span> </span><br>> El programa va soltando soluciones o datos y no sé como mezclar esto con la deteccion de la tecla esc.<br>><span> </span><br>> Gracias de antemano.<br>> _______________________________________________<br>



> Lista de correo Cconclase<span> </span><a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>><span> </span><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>



> Bajas:<span> </span><a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>_______________________________________________<br>Lista de correo Cconclase<span> </span><a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>



<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>Bajas:<span> </span><a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></div>



</span></blockquote></div></div></div><br></div><br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br><br clear="all"><br>-- <br> (\__/) <br>(='.'=)This is Bunny. Copy and paste bunny into your <br>



(")_(")signature to help him gain world domination. <br><br>
</div>
_______________________________________________<br>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>

Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></blockquote></div></div></div><br></div></div><br>_______________________________________________<br>


Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br><br clear="all"><br>-- <br> (\__/) <br>(='.'=)This is Bunny. Copy and paste bunny into your <br>

(")_(")signature to help him gain world domination. <br><br>
_______________________________________________<br>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></blockquote></div><br></div></body></html>