Pregunta

Recientemente he estado escribiendo un programa en C ++ que pings tres sitios web diferentes y luego dependiendo de aprobación o no se va a esperar 5 minutos o 30 segundos antes de intentar de nuevo.

Actualmente He estado usando la biblioteca ctime y la siguiente función para procesar mi espera. Sin embargo, de acuerdo con mi metro CPU esto es una solución inaceptable.

void wait (int seconds)
{
   clock_t endwait;
   endwait = clock () + seconds * CLOCKS_PER_SEC;
   while (clock () < endwait) {}
}

La razón por la que esta solución es inaceptable, porque es según mi medidor de CPU se ejecuta el programa en un 48% a un 50% de mi CPU mientras espera. Tengo un procesador de 1,2 GHz 64 x2 Athlon. No hay manera de que mi programa de línea de 130 modesta debería incluso llegar cerca del 50%.

¿Cómo puedo escribir mi mejor función de espera para que sólo está utilizando un mínimo de recursos?

¿Fue útil?

Solución

Para mantenerse portátil se puede utilizar Boost :: Tema para dormir:

#include <boost/thread/thread.hpp>

int main()
{
    //waits 2 seconds
    boost::this_thread::sleep( boost::posix_time::seconds(1) );
    boost::this_thread::sleep( boost::posix_time::milliseconds(1000) );

    return 0;
}

Otros consejos

Con el 11 estándar C ++ el siguiente enfoque se puede utilizar:

std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::this_thread::sleep_for(std::chrono::seconds(100));

Alternativamente sleep_until podría ser utilizado.

sueño en lugar de un vacío mientras bucle.

Sólo para explicar lo que está pasando: cuando se llama reloj () su programa recupera la otra vez: usted está pidiendo que hacer eso tan rápido como pueda hasta que llega el tiempo del fin ... que las hojas de la base de la CPU ejecuta el programa de "girar" tan rápido como se puede a través de su bucle, la lectura de los tiempo millones de veces por segundo con la esperanza de que va a haber rodado sobre el tiempo del fin. Usted necesita decir en lugar del sistema operativo que desea ser despertado después de un intervalo ... entonces pueden suspender su programa y dejar que otros programas se ejecutan (o la inactividad del sistema) ... eso es lo que las diversas funciones del sueño mencionan en otra respuestas son para.

Hay Dormir en windows.h, en * nix que hay en el sueño unistd.h.

Hay una solución más elegante @ http: // www.faqs.org/faqs/unix-faq/faq/part4/section-6.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top