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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


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

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Temporizadores
« en: 9 Julio 2014, 03:56 am »

Como hago para luego de que pase un tiempo el programa haga lo que le ordene por ejemplo que deje digitar un numero por 60 segundos por ejemplo despues de esos 60 segundos no deje digitar nada y salgo un mensaje que me diga ha excedido su tiempo sera con clock() porque se que sleep puede que no sirva


« Última modificación: 9 Julio 2014, 04:08 am por Juan821 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Temporizadores
« Respuesta #1 en: 9 Julio 2014, 08:33 am »

¿Es un entorno de consola? ¿aplicación de escritorio? ¿usas alguna librería para la interfaz de usuario?

Tu pregunta, así planteada, es demasiado escueta.


En línea

Juan821

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Temporizadores
« Respuesta #2 en: 14 Julio 2014, 22:37 pm »

Es un programa normal en visual studio lo que trato de hacer es esto

Código
  1. cin>>x /* esto es para que digite algo y lo lea, lo que necesito es
  2. que si se pasan 60 segundos y no ha digitado nada salga el
  3. mensaje de que ha excedido su tiempo y ya siga con lo que
  4. hay abajo de esta linea como por ejemplo*/
  5.  
  6. if x==w printf("ha ganado");  
« Última modificación: 14 Julio 2014, 22:41 pm por Juan821 » En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Temporizadores
« Respuesta #3 en: 14 Julio 2014, 23:10 pm »

podrías crear un thread para escribir y un thread para contar el tiempo, en que estas, windows o linux?

también puedes cojer el reloj del PC y con un bucle ir comprobando si pasaron más de 60 segundos
« Última modificación: 14 Julio 2014, 23:16 pm por Stakewinner00 » En línea

Juan821

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Temporizadores
« Respuesta #4 en: 15 Julio 2014, 20:19 pm »

podrías crear un thread para escribir y un thread para contar el tiempo, en que estas, windows o linux?

también puedes cojer el reloj del PC y con un bucle ir comprobando si pasaron más de 60 segundos
estoy en windows entonces pero con un bucle como?
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Temporizadores
« Respuesta #5 en: 16 Julio 2014, 00:07 am »

estoy en windows entonces pero con un bucle como?

la librería estándar de C++ no dispone de métodos que permitan una lectura no bloqueante sobre el buffer de entrada.

La opción sería crear una tarea con un hilo secundario que se encargase de realizar la lectura... en el hilo principal pones una espera activa hasta que pase el tiempo o el usuario introduzca un valor.... si se produce el timeout entonces matas el hilo secundario. Si antes de acabar el tiempo el usuario introduce un valor entonces dejas que el usuario introduzca su valor con normalidad y el programa continua.
En línea

kutcher

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: Temporizadores
« Respuesta #6 en: 16 Julio 2014, 01:48 am »

Como hago para luego de que pase un tiempo el programa haga lo que le ordene por ejemplo que deje digitar un numero por 60 segundos por ejemplo despues de esos 60 segundos no deje digitar nada y salgo un mensaje que me diga ha excedido su tiempo

Buenas, la unica forma que se me ocurre para lograr eso sin el uso de hilos, es haciendo uso de las funciónes kbhit() y getche() de la libreria conio.h

Código
  1. #include <iostream>
  2. #include <cstddef>
  3. #include <ctime>
  4. #include <conio.h>
  5.  
  6. bool get_input ( char *buffer, std::size_t size, int timeout )
  7. {
  8.    std::time_t start = std::time ( 0 );
  9.    std::size_t n = 0;
  10.  
  11.    for (;;)
  12.    {
  13.        if ( n == 0 && std::difftime (std::time(0), start ) >= timeout )
  14.            return false;
  15.  
  16.        if (kbhit()) {
  17.            if ( n == size - 1 )
  18.                break;
  19.            char ch = (int)getche();
  20.            if ( ch == '\r' )
  21.            {
  22.                buffer[n++] = '\n';
  23.                break;
  24.            }
  25.            else
  26.                buffer[n++] = ch;
  27.        }
  28.    }
  29.    buffer[n] = '\0';
  30.  
  31.    return true;
  32. }
  33.  
  34. int main(void)
  35. {
  36.    char buffer[20] = {};
  37.  
  38.    if ( !get_input (buffer, 20, 5) ) {
  39.        std::cout << "Tiempo agotado\n";
  40.        buffer[0] = '\n';
  41.    }
  42.    std::cout<<"\nSalida: " << buffer;
  43.  
  44.    return 0;
  45. }
  46.  

Se que la libreria conio.h no es recomendable utilizarla
« Última modificación: 16 Julio 2014, 01:51 am por kutcher » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Temporizadores
« Respuesta #7 en: 16 Julio 2014, 21:11 pm »

...........................estoy en windows ..........................

Pues si estas en Windows podrías usar windows.h para "Sleep" y conio.h para kbhit:

Código
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. int main(){
  9.  int i , ss = 5 , algo = 0 ;
  10.  while( !kbhit() ){
  11.    for( i = ss ; i>= 0 ; i-- ){
  12.      if (kbhit()){
  13.        cout << endl;
  14.        break;
  15.      }
  16.    Sleep(1000);
  17.    cout << "Quedan: " << setw(2) << i << " segundos.\r" ;
  18.    }
  19.    if ( i == -1 ) break;
  20.  }
  21.  if ( i> -1){
  22.    cin >> algo;
  23.    cout << endl << "algo= " << algo << endl;
  24.  }
  25.  else cout << endl << "Tiempo excedido\n" << endl;
  26.  return 0;
  27. }

Y reitero lo de kutcher, sí ya sé que no es aconsejable usar conio, pero no se me apetece meterme ahora con las API de Windows.   ;)

¡¡¡¡ Saluditos! ..... !!!!



En línea

Juan821

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Temporizadores
« Respuesta #8 en: 17 Julio 2014, 20:02 pm »

Pues si estas en Windows podrías usar windows.h para "Sleep" y conio.h para kbhit:

Código
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. int main(){
  9.  int i , ss = 5 , algo = 0 ;
  10.  while( !kbhit() ){
  11.    for( i = ss ; i>= 0 ; i-- ){
  12.      if (kbhit()){
  13.        cout << endl;
  14.        break;
  15.      }
  16.    Sleep(1000);
  17.    cout << "Quedan: " << setw(2) << i << " segundos.\r" ;
  18.    }
  19.    if ( i == -1 ) break;
  20.  }
  21.  if ( i> -1){
  22.    cin >> algo;
  23.    cout << endl << "algo= " << algo << endl;
  24.  }
  25.  else cout << endl << "Tiempo excedido\n" << endl;
  26.  return 0;
  27. }

Y reitero lo de kutcher, sí ya sé que no es aconsejable usar conio, pero no se me apetece meterme ahora con las API de Windows.   ;)

¡¡¡¡ Saluditos! ..... !!!!





ya lo probe si sirve pero el problema es que si le dan a una letra y no le dan enter
se pausa la cuenta regresiva he intentando arreglarlo pero no he sido capas aunque muchas gracias que con esto seguire averiguando para perfeccionarlo gracias
En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Temporizadores
« Respuesta #9 en: 18 Julio 2014, 10:12 am »

la librería estándar de C++ no dispone de métodos que permitan una lectura no bloqueante sobre el buffer de entrada.

La opción sería crear una tarea con un hilo secundario que se encargase de realizar la lectura... en el hilo principal pones una espera activa hasta que pase el tiempo o el usuario introduzca un valor.... si se produce el timeout entonces matas el hilo secundario. Si antes de acabar el tiempo el usuario introduce un valor entonces dejas que el usuario introduzca su valor con normalidad y el programa continua.
¿Puedes brindarnos un ejemplo sencillo y/o alguna pagina/pdf/tutorial o lo que sea sobre el tema?
He leído sobre POSIX no POSIX y la verdad es que menudo lio eso de los trheads y procesos.
Pinta bien pero no veas si raya jejeje.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Aporte] Temporizadores con cuenta atrás desde una Fecha [PHP]
PHP
z3nth10n 0 2,508 Último mensaje 16 Agosto 2013, 13:09 pm
por z3nth10n
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines