Autor
|
Tema: AYUDA CON C++ SLEEP (MANEJO DE TIEMPO) (Leído 10,618 veces)
|
alexalfonso
Desconectado
Mensajes: 4
|
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.
|
|
|
En línea
|
|
|
|
daryo
|
es que se produce un retardo por cada vez que llamas sleep y lo llamas por cada milisegundo de ahi la demora . int main() { int t=0; int fin=0; cin>>fin; Sleep(fin); 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 mira una forma para contar el tiempo: #include<windows.h> #include<iostream> #include<cstdlib> #include<time.h> using namespace std; int main() { /* 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 cout << "Tiempo transcurrido: " << ((double)clock() - start ) << endl ;Sleep(1000);
|
|
« Última modificación: 1 Junio 2013, 16:39 pm por daryo »
|
En línea
|
buenas
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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.pngEsto 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. es 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).
|
|
« Última modificación: 1 Junio 2013, 16:35 pm por amchacon »
|
En línea
|
|
|
|
daryo
|
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
|
|
|
En línea
|
buenas
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
prueba 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 *_*
|
|
|
En línea
|
|
|
|
daryo
|
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 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
|
|
« Última modificación: 1 Junio 2013, 21:29 pm por daryo »
|
En línea
|
buenas
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
ademas 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). tengo un core i3 primera generacion con 4gb de ram y windows 7 recien instalado 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 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
|
|
« Última modificación: 1 Junio 2013, 21:41 pm por amchacon »
|
En línea
|
|
|
|
alexalfonso
Desconectado
Mensajes: 4
|
MUCHAS GRACIAS POR RESPONDER, LAMENTO NO HABER RESPONDIDO ANTES. Me he visto en la obligación de desconectarme este día 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 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.
|
|
|
En línea
|
|
|
|
alexalfonso
Desconectado
Mensajes: 4
|
ademas 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) _____________________________________________________________ probe el codigo y se demoro 27 segundos . Algo así me pasa _____________________________________________________________ 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. Tenía entendido que el Sleep podía retrasar el tiempo con una precisión mayor que diezmilésimas de segundo. " Sleep(0.01); " _____________________________________________________________ como 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
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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:#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?:
A mí me podéis llamar por mi nombre de pila León, 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! .... ...
|
|
« Última modificación: 2 Junio 2013, 16:52 pm por leosansan »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
problema con API sleep
Programación Visual Basic
|
vivachapas
|
7
|
3,144
|
31 Mayo 2007, 01:04 am
por Freeze.
|
|
|
Tutos: obtener datos y manejo de windows con c#... tuto_1: manejo de procesos
Scripting
|
tongoxcore
|
2
|
9,412
|
21 Julio 2008, 23:44 pm
por Zaraki_lkenpachi
|
|
|
manejo el tiempo en C
Programación C/C++
|
flacc
|
5
|
8,192
|
16 Febrero 2011, 20:50 pm
por Garfield07
|
|
|
alternativa a sleep
PHP
|
z_ane_666
|
5
|
5,584
|
24 Mayo 2011, 05:35 am
por [u]nsigned
|
|
|
Dudas con Timer como sustituto de Sleep -- por precisión del tiempo
.NET (C#, VB.NET, ASP)
|
SARGE553413
|
4
|
3,352
|
25 Julio 2014, 16:19 pm
por SARGE553413
|
|