es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función de suspensión de Windows es extremadamente lenta.

Estoy desarrollando un programa utilizando el comando Sleep de Windows.h y estoy experimentando una frustrante diferencia al ejecutar mi programa en Windows 10 en lugar de Windows 7. Simplifiqué mi programa al programa a continuación, el cual muestra el mismo comportamiento que mi programa más complicado.

En Windows 7, este bucle de 5000 repeticiones se ejecuta con la función Sleep a 1ms. Esto toma 5 segundos en completarse.

En Windows 10, cuando ejecuto exactamente el mismo programa (exactamente el mismo archivo binario ejecutable), este programa tarda casi un minuto en completarse.

Esto es completamente inaceptable para mi aplicación, ya que necesito tener un retraso de 1ms para interactuar con el hardware que estoy utilizando.

También probé una sugerencia de otra publicación de utilizar el comando select() (a través de winsock2), pero ese comando tampoco funcionó para retrasar 1ms. He probado este programa en múltiples PC con Windows 7 y Windows 10, y la causa raíz del problema siempre apunta al uso de Windows 10 en lugar de Windows 7. El programa siempre se ejecuta en ~5 segundos en numerosas PC con Windows 7, mientras que en las múltiples PC con Windows 10 que he probado, la duración ha sido mucho más larga, ~60 segundos.

He estado utilizando Microsoft Visual Studio Express 2010 (C/C++) así como Microsoft Visual Studio Express 2017 (C/C++) para compilar los programas. La versión de Visual Studio no influye en los resultados.

También he cambiado las opciones de compilación de “Debug” a “Release” e intenté optimizar el compilador, pero esto tampoco ayuda.

Cualquier sugerencia sería muy apreciada.

“`c
#include <stdio.h>
#include <windows.h>

#define LOOP_COUNT 5000

int main()
{
int i = 0;

<pre><code>for (i; i < LOOP_COUNT; i++){
Sleep(1);
}

return 0;
</code></pre>

}
“`</windows.h></stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que la función Sleep no está funcionando correctamente en Windows 10 para su caso de uso específico. Una sugerencia sería intentar usar una función de temporización diferente en lugar de Sleep, como timeGetTime, QueryPerformanceCounter o GetTickCount.

    Otra cosa a considerar es que Windows 10 tiene configuraciones de administración de energía diferentes a las de Windows 7, lo cual podría estar afectando el tiempo de su programa. Podría intentar ajustar las configuraciones de administración de energía en su PC con Windows 10 y ver si eso marca una diferencia.

    También podría ser útil investigar el hardware que está utilizando y verificar si hay algún problema de compatibilidad con Windows 10 que podría estar causando el retraso.

    En general, puede requerir un poco de prueba y error para encontrar una solución que funcione para su programa y configuración de hardware específica. ¡Buena suerte!

Comments are closed.