AYUDA CON C++ SLEEP (MANEJO DE TIEMPO)

Iniciado por alexalfonso, 1 Junio 2013, 16:17 PM

0 Miembros y 1 Visitante están viendo este tema.

alexalfonso

HEY NECESITO UNA AYUDA CON ESTO ( C++ ):

Es muy simple, imprime las milésimas de segundo hasta que llega a la cantidad de milésimas que escribimos de primero.

#include<windows.h>
#include<iostream>
#include<cstdlib>
#include<time.h>

using namespace std;

int main()
{
int t=0;
int fin=0;
cin>>fin;
while(fin>t)

{
cout<<t<<endl;
Sleep(1);
t++;
}

system("pause");

return 0;
}

Investigué durante días por mi mismo pero nada así que ahora acudo a los profesionales XD.

El problema es que el Sleep no me esta marcando el tiempo de forma exacta, se tarda como 12 segundos en llegar a 1000, no lo he probado en otra pc, PERO ALGO MÁS RARO ES QUE LO HE INTENTADO REESCRIBIR Y A VECES MARCA EL TIEMPO TAN EXACTO QUE LO COMPARO CON EL DE LA PC Y VA PERFECTO, LUEGO EN ALGÚN MOMENTO YA NO LO MARCA BIEN, CUANDO LO ABRO NUEVAMENTE, O AL SIGUIENTE DÍA, QUE LO QUIERO PROBAR. Creo que he intentado de todo pero si no funciona algo me hace falta.

Apenas comienzo a programar así que disculpen si hay algún error de novato.

daryo

#1
es que se produce un retardo por cada vez que llamas sleep y lo llamas por cada milisegundo de ahi la demora .

Código (c++) [Seleccionar]
int main()
{
int t=0;
int fin=0;
cin>>fin;
Sleep(fin);


system("pause");

return 0;
}

en este caso el sleep si dura lo que le pones ..

como concejo intenta buscar otra forma de contar el tiempo  el Sleep simplemente es una pausa

:P

mira una forma para contar el tiempo:
Código (c++) [Seleccionar]
#include<windows.h>
#include<iostream>
#include<cstdlib>
#include<time.h>

using namespace std;

int main()
{
clock_t start = clock();

/* Aqui va el codigo */
while(true)
{

cout << "Tiempo transcurrido: " << ((double)clock() - start) << endl;


}
return 0;
}


incluso si pones un sleep que te cuenta cada 1000 milisegundos es decir cada segundo el sleep es mucho mas exacto
Código (c++) [Seleccionar]

cout << "Tiempo transcurrido: " << ((double)clock() - start) << endl;
Sleep(1000);

buenas

amchacon

#2
El tiempo que pones en el sleep es el tiempo mínimo que permanecerá dormido, dependiendo de la carga que tenga el SO el tiempo será el mismo o más.

Ahora bien, esos descompases de tiempo no son normales:

se tarda como 12 segundos en llegar a 1000
¿En serio? A mi me tarda 1s:
http://imageshack.us/a/img7/4753/sinttulofmr.png

Esto no es un ejercicio de cálculo, aunque tuvieras un procesador de hace 10 años no debería darte valores tan bestias... Me da a mi que el problema está en como mides el tiempo.

Citares que se produce un retardo por cada vez que llamas sleep y lo llamas por cada milisegundo de ahi la demora .
No importa, una CPU puede hacer 1000 llamadas sin problemas (de hecho, son 3000, por el cout y el endl).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

daryo

Cita de: amchacon en  1 Junio 2013, 16:33 PM

No importa, una CPU puede hacer 1000 llamadas sin problemas (de hecho, son 3000, por el cout y el endl).
prueba el segundo programa y veras que es mucho mas exacto

saludos
buenas

amchacon

Cita de: daryo en  1 Junio 2013, 16:38 PMprueba el segundo programa y veras que es mucho mas exacto
No te digo que no, lo que me refiero esque hacer 3000 llamadas no cuesta 11 segundos *_*
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

daryo

#5
Cita de: amchacon en  1 Junio 2013, 20:41 PM
No te digo que no, lo que me refiero esque hacer 3000 llamadas no cuesta 11 segundos *_*

probe el codigo y se demoro 27 segundos .
tengo un core i3 primera generacion  con 4gb de ram y windows 7 recien instalado  :P asi que tampoco es tan viejo ps y en cambio el otro si se demoro el tiempo que debia xD

ademas multiplica esas 3000(ni idea si realmente son 3000 o es que sleep usa muchas mas de esas o menos) llamadas por cada milisegundo eso supongo si llega a generar desface dependiendo de tu pc()

supongo tambien influye la cantidad de procesos que este haciendo el pc en el momento


PD:sospecho que tienes un mounstro de pc  y que te llamas miguel  :xD
buenas

amchacon

#6
Cita de: daryo en  1 Junio 2013, 21:03 PMademas multiplica esas 3000 llamadas por cada milisegundo eso supongo si llega a generar desface dependiendo de tu pc()
Hace 3 llamadas por milisegundo, lo que equivale a 3000 llamadas en un segundo.

Pon tres couts en un bucle y comprueba lo que tarda en hacerlo 1000 veces (los endl cuentan también como un cout).

Cita de: daryo en  1 Junio 2013, 21:03 PMtengo un core i3 primera generacion  con 4gb de ram y windows 7 recien instalado  :P asi que tampoco es tan viejo ps y en cambio el otro si se demoro el tiempo que debia xD

PD:sospecho que tienes un mounstro de pc  y que te llamas miguel  :xD
Tengo un i5 2400 3,2 GHZ y 4 gb de ram... Es mejor que el tuyo pero tampoco es un monstruo xD

¿Es dual core o quad core? El poder hacer más cosas a la vez puede influir en el sleep... También puede ser que tengas la CPU a rebosar... ¿Has activado la optimización del compilador? (-O2)

PD: Has descubierto mi nombre, ahora tendré que matarte  >:D
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

alexalfonso

MUCHAS GRACIAS POR RESPONDER, LAMENTO NO HABER RESPONDIDO ANTES.

Me he visto en la obligación de desconectarme este día  :silbar:

revisaré cuidadosamente todo y avisaré cuando ya no tenga problemas. LA PC NO PUEDE SER LA CAUSA:

FX 6200 3.8 GHZ
4 GB corsair vegance blue
mother GIGABYT GA-970A-UD3

No es la gran cosa pero peor es nada xD

Uso AMD POR QUE NO ME ALCANZABA PARA EL INTEL  :laugh:

PERO AUN CON LA MÍNIMA CARGA QUE PUDE PONERLE, el programa a veces funcionaba y a veces no, hablo de que ahora en la mañana lo probé nada, acabo de probarlo funcionó, lo probé antes de subirlo a internet funcionó, lo descargué y nada, y estoy hablando del ejecutable, bueno pero me han dado pistas o quizás la repuesta.

alexalfonso

Citarademas multiplica esas 3000 llamadas por cada milisegundo eso supongo si llega a generar desface dependiendo de tu pc()

EL PROGRAMA HA FUNCIONADO PERFECTAMENTE LO QUE PASA ES QUE A VECES DEJE DE FUNCIONAR, Y NO IMPORTA QUE HAGA SE MANTIENE CONTANDO LENTO EL TIEMPO.
_____________________________________________________________

El valor de los 12 segundos fue aproximado (9 - 12 segundos)
_____________________________________________________________

Citarprobe el codigo y se demoro 27 segundos .

Algo así me pasa
_____________________________________________________________

CitarEl tiempo que pones en el sleep es el tiempo mínimo que permanecerá dormido, dependiendo de la carga que tenga el SO el tiempo será el mismo o más.

Tenía entendido que el Sleep podía retrasar el tiempo con una precisión mayor que diezmilésimas de segundo.

" Sleep(0.01); "

_____________________________________________________________


Citarcomo concejo intenta buscar otra forma de contar el tiempo  el Sleep simplemente es una pausa

Gracias por el momento, creo que usaré eso, pero me niego a dejar así ese problema, seguramente es algo muy muy raro y eso me intriga seguiré realizando pruebas usando sus aportes como soporte y buscaré el problema

;-)  ;-) ;-)  ;-)

leosansan

#9
Cita de: alexalfonso en  1 Junio 2013, 16:17 PM
HEY NECESITO UNA AYUDA CON ESTO ( C++ ):

Es muy simple, imprime las milésimas de segundo hasta que llega a la cantidad de milésimas que escribimos de primero.

El problema es que el Sleep no me esta marcando el tiempo de forma exacta, se tarda como 12 segundos en llegar a 1000,

Es hasta cierto punto normal ya que el compilador mide el tiempo total de la ejecución del programa y tal como lo tienes no sólo cuenta el tiempo de 1 segundo correspondiente a Sleep(1) 1000 veces, según pones en el código, sino que además hay un retardo considerable empleado en la impresión por pantalla de los 1000 números así como el retardo en presionar enter debida a la función system. Es este tiempo empleado el que origina que en lugar de tardar 1 segundo tarde los 12 que tú comentas, aunque aún con la impresión es algo elevado y lo achaco al retardo adicional en introducir el dato de 1000.

Para ver si tardaría 1 segundo, como pareciera en un principio por el bucle de Sleep(1) 1000 veces habría que desactivar la impresión y la función system, aún así tardaría un pelin más por  las llamadas a la memoria e incrementos correspondientes de la variable.

Me ha salido  1.015 segundos, muy cercano al 1 segundo esperado, dando de antemano el valor de 1000 a la variable y desactivando la impresión y el system, para descontar el tiempo que tardo en introducir dicho valor y el enter:


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

using namespace std;

int main()
{
   int t=0,fin;
   /*cin>>*/fin=1000;
   while(fin>t)
   {
       //cout<<t<<endl;
       Sleep(1);
       t++;
   }
   //ystem("pause");
return 0;
}



Y lo que viene es para el amigo amchacon, ¿o podemos llamarte ya Miguel?:

Cita de: amchacon en  1 Junio 2013, 16:33 PM

¿En serio? A mi me tarda 1s:
http://imageshack.us/a/img7/4753/sinttulofmr.png


A mí me podéis llamar por mi nombre de pila León, :o  sí de nombre, no de apellido. Y lo de "san" es por el primer apellido :-) . Además, para más inri, soy leo de  horóscopo, ni tan siquiera, como buen leo, me interesan los demás signos zodiacales, sencillamente no tienen la suerte de ser leo. Y, como no y según habeís podido observar, mi animal preferido con diferencia es el León.  ;)

Rápido, rápido tu PC, el mio tarda algo más, 1.01. O como me comento, creo que mr.blood dejo de tener abiertas a la vez que el Code:Blocks 27, sí 27 contaditas, páginas web, música a todo volumen, así como los programas Python -sí, no puedo estar sólo con C y C++, en los que soy un aficionado, no como ustedes que son aunténticos profesionales, y  Matlab y Mathematica que son en lo que realmente trabajo duramente ahora y,  casi me olvido, mantengo abiertas las puertas del Facebook, el antiguo Messenger, ahora Skype mientras con utorrent y la mulita me descargo los últimos y no tan últimos estrenos y documentos varios y paro de contar mi vida, ! curiosos, que sois unos curiosos!. El problema de ser, aún a mi ya elevada edad y, a pesar de la enfermedad, una persona hiperactiva

Me entra una duda existencial al ver la imagen que posteas, ¿por que creas un proyecto para probar un código tan simple cuando puedes sencillamente crear un File nuevo?. La ventaja de trabajar con file es que puedes mantener "operativos" multitud de files para "probar"cosas mientras con un proyecto sólo puedes probar uno, cerrar y abrir otro proyecto y así sucesivamente. Yo uso ventanitas múltiples en Code::Blocks y cada una con múltiples pestañas. Así trabajo yo, en general dejando proyectos para programas que necesiten de varios file a la vez. Y eso porque ahora estoy en un portátil de tan solo 18 pulgadas, porque en la torre con uno de los monitores de 32 pulgadas mantengo nueve ventanitas abiertas, en lugar de las seis que aparecen en la imagen anterior. Y sí , estoy en esta situación porque ando reinstalado el Windows 7 -el 8 me resisto todavía a instalarlo, me parece poco práctico para un ordenador de sobremesa, es más bien para tablets y smarpfones- debido  a que una actualización automática me mando a la porra el sistema. Parece mentira pero aún ocurren cosas como esas.


Saluditos desde Gran Canaria! .... ...