¿La mejor manera de frenar un hilo? ¿Está usando Sleep () OK?

He escrito una biblioteca de C ++ que hace un trabajo de CPU muy pesado (todo ello matemático y cálculos) y, si se lo deja a sus propios dispositivos, consumirá fácilmente el 100% de todos los recursos de CPU disponibles (también es multiproceso al número de recursos lógicos disponibles). núcleos en la máquina).

Como tal, tengo una devolución de llamada dentro del ciclo de cálculo principal que el software que utiliza la biblioteca debe llamar:

while(true)
{
    //do math here
    callback(percent_complete);
}

En la devolución de llamada, el cliente llama a Sleep (x) para ralentizar el hilo.

Originalmente, el código del lado del cliente era una llamada fija de Suspensión (100), pero esto llevó a un rendimiento poco confiable porque algunas máquinas terminan los cálculos más rápido que otras, pero la suspensión es la misma en todas las máquinas. Así que ahora el cliente comprueba la hora del sistema, y ​​si ha pasado más de 1 segundo (lo que == varias iteraciones), se quedará en reposo durante medio segundo.

¿Es esta una forma aceptable de ralentizar un hilo? ¿Debo usar un semáforo / mutex en lugar de Sleep () para maximizar el rendimiento? ¿Está durmiendo x milisegundos por cada 1 segundo de trabajo de procesamiento bien o hay algo mal que no estoy notando?

La razón por la que pregunto es que la máquina todavía está muy atascada, aunque Taskman muestra que el proceso ocupa aproximadamente el 10% de la CPU. Ya he explorado el contenido del disco duro y la contención de la memoria, así que ahora me pregunto si la forma en que desacelero el hilo está causando este problema.

¡Gracias!

Respuestas a la pregunta(5)

Su respuesta a la pregunta