Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Ruben_efl18 en 11 Mayo 2016, 02:59 am



Título: Romper ciclo sin interferir.
Publicado por: Ruben_efl18 en 11 Mayo 2016, 02:59 am
Buenas.   ::)
Les cuento el problema que tengo, básicamente estoy haciendo un reloj y quiero que solamente al oprimir una tecla este se detenga, pero no encuentro la forma mas eficiente de hacerlo, ya que con el código como lo tengo hace una pausa hasta que introduzca un dato, y eso no es lo que quiero, quiero que el reloj continué sin pausarse y en cualquier momento que teclee x tecla salga del mismo. Les anexo el código si me pueden ilustrar con esto estaría muy agradecido.

Código:
#include<stdio.h>
#include<time.h>
#include<conio.h


int main(){

char tecla;



do{
time_t tiempo=time(0);
                struct tm *tlocal = localtime(&tiempo);
                char output[128];
strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
printf("%s\n",output);
Sleep(100);


tecla=getch();    //Este getch es el que menciono
if(tecla=='m')return 0;



system("cls");

}while(1);
printf("Saliendo..."); getch(); return 0;
}


Título: Re: Romper ciclo sin interferir.
Publicado por: geeke en 11 Mayo 2016, 04:36 am
Si usas conio.h dispones de kbhit()

Código
  1. if (kbhit())
  2. {
  3.    // Se presionó una tecla
  4. }

Cabe destacar que conio.h no es estándar ni tampoco portable


Título: Re: Romper ciclo sin interferir.
Publicado por: ivancea96 en 11 Mayo 2016, 15:48 pm
Una opción, es que tengas un thread a parte que pida la entrada. Si la entrada es la que buscas, cambia por ejemplo una variable global "terminado = 1". El thread principal, lo único que haría es comprobar en cada ciclo si "terminado==1".

Otra opción, podría ser capturando una señal como la de interrupción, enviada al pulsar CTRL+C. No funcionará en todos los casos, pero es una opción en ese caso particular.
http://stackoverflow.com/questions/4217037/catch-ctrl-c-in-c (http://stackoverflow.com/questions/4217037/catch-ctrl-c-in-c)