Duda con temporizador en C++

Iniciado por SrCooper, 7 Julio 2013, 00:13 AM

0 Miembros y 2 Visitantes están viendo este tema.

OmarHack

Si prefieres un for aquí lo tienes a lo ansi. XD
Código (cpp) [Seleccionar]
#include <iostream>
void funcionEspera(int);
int segundosEspera = 3;
void funcion1(void);
void funcion2(void);
void funcion3(void);

int main()
{
funcion1();
funcionEspera(2);
funcion1();
funcionEspera(segundosEspera);
funcion2();
funcionEspera(segundosEspera);
funcion3();
funcionEspera(3);
return 0;
}
void funcionEspera(int segundosEspera)
{
      for(time_t i = (time(NULL) + segundosEspera); time(NULL) != i;);
}
void funcion1(void)
{
std::cout << "Asi te servira, espera..." <<std::endl;
}
void funcion2(void)
{
std::cout << ":)";
std::cout <<std::endl << "introduce un numero para esperar por ultima vez el tiempo que indiques:";
std::cin >> segundosEspera;
}
void funcion3 (void)
{
std::cout << std::endl << "Chau SrCooper xDDD";
}
I like to test things.

amchacon

¿? Eso es como si pusieras un rest(3000) pero más complicado y con mucho peor rendimiento xD.

Pero sí, es muy imaginativo  ;)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

OmarHack

Cita de: amchacon en  7 Julio 2013, 01:37 AM
¿? Eso es como si pusieras un rest(3000) pero más complicado y con mucho peor rendimiento xD.

Pero sí, es muy imaginativo  ;)
¿rest de que librería es? Así lo implemento en un par de códigos. :P
Lo bueno es que así el usuario puede seleccionar el tiempo a esperar (en caso de que se necesitara).
I like to test things.

amchacon

Cita de: OmarHack en  7 Julio 2013, 01:41 AM
¿rest de que librería es? Así lo implemento en un par de códigos. :P
Lo bueno es que así el usuario puede seleccionar el tiempo a esperar (en caso de que se necesitara).
rest es de Allegro pero tiene su equivalente en cualquier librería/SO:

- Windows API:

Código (cpp) [Seleccionar]
#include <windows.h>

Sleep(milisegundos); // duerme unos milisegundos


- Linux:

Código (cpp) [Seleccionar]
#include <pthread.h>

sleep(milisegundos); // La S aqui es minuscula


- SDL:

Código (cpp) [Seleccionar]
SDL_Delay(milisegundos);


Manejar el tiempo durmiendo es mucho más eficiente que contar el tiempo, al dormir el SO puede usar el procesador en otras cosas  ;)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

OmarHack

Cita de: amchacon en  7 Julio 2013, 01:47 AM
rest es de Allegro pero tiene su equivalente en cualquier librería/SO:

- Windows API:

Código (cpp) [Seleccionar]
#include <windows.h>

Sleep(milisegundos); // duerme unos milisegundos


- Linux:

Código (cpp) [Seleccionar]
#include <pthread.h>

sleep(milisegundos); // La S aqui es minuscula


- SDL:

Código (cpp) [Seleccionar]
SDL_Delay(milisegundos);


Manejar el tiempo durmiendo es mucho más eficiente que contar el tiempo, al dormir el SO puede usar el procesador en otras cosas  ;)
Cierto! Para Sdl me viene bien. ;)
Saludos y gracias! 
I like to test things.

anonimo12121

#15
http://c.conclase.net/librerias/index.php?ansilib=time#inicio aquí tienes !
Espero que te sirva, creo que es mejor que usar una libreria que puede que incluya cosas no necesaría digo yo.

Cita de: SrCooper en  7 Julio 2013, 01:10 AM


La verdad es que no entiendo muy bien todo eso de DWORD, LPVOID y lpParam. ¿Qué significan exactamente?
Creo que son typedef de VS en plan;

typedef unsigned int Uint
Uint x=5;//Bien
Uint x= -1; Mal solo acepta positivos.
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

rir3760

Cita de: Xafi en  7 Julio 2013, 02:21 AMtypedef unsigned int Uint
Uint x=5;//Bien
Uint x= -1; Mal solo acepta positivos.
No. La ultima asignación es valida (operaciones de ese tipo pueden causar un verdadero dolor de cabeza).

Ello porque si un valor esta fuera del rango valido (tipo entero sin signo) a este se le suma (o resta, dependiendo del caso) MAX + 1 hasta que este en el rango valido.

Por cierto el ejemplo que pones es la forma usual para calcular el valor máximo sin tener que utilizar el encabezado <limits.h>. Un ejemplo:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main(void)
{
   /* Imprime el valor maximo para el tipo unsigned int */
   printf("%u\n", (unsigned) -1);
   printf("%u\n", UINT_MAX);
   
   /* Imprime el valor maximo para el tipo unsigned long */
   printf("%lu\n", (unsigned long) -1);
   printf("%lu\n", ULONG_MAX);
   
   return EXIT_SUCCESS;
}


Otro escenario problemático son las expresiones donde se utilizan valores de tipo signed y unsigned. Por ejemplo este programa en C:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int a = -1;
   int b = 0;
   unsigned x = 0;
   
   printf("%d < %d  ? %s\n", a, b, a < b ? "Si" : "No");
   printf("%d < %uU ? %s\n", a, x, a < x ? "Si" : "No");
   
   return EXIT_SUCCESS;
}


Genera la salida:
-1 < 0  ? Si
-1 < 0U ? No


Ello porque los operandos de un operador binario deben ser del mismo tipo, en este caso el valor -1 de tipo signed int se convierte automáticamente al tipo unsigned int resultando en el valor mencionado (el máximo) y solo entonces se realiza la comparación.

Y si bien un compilador en modo estricto puede generar un mensaje de advertencia al compilar ese programa (o uno similar) ello no esta garantizado (y a veces uno las desactiva al saber que son inocuas).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

SrCooper

Cita de: OmarHack en  7 Julio 2013, 01:30 AM
Si prefieres un for aquí lo tienes a lo ansi. XD

Está bien el código, pero como dice amchacon, hace exactamente lo mismo que un rest(). Y el rest es completamente inútil en un videojuego, porque para todo el bucle y es imposible jugar :D

Al final me he decantado por aprender hilos y poner el rest en segundo plano.

Un saludo