Melhor maneira de diminuir a velocidade de um thread? Está usando Sleep () OK?

Eu escrevi uma biblioteca C ++ que faz um trabalho muito pesado da CPU (tudo isso, matemática e cálculos) e, se deixada para seus próprios dispositivos, consumirá facilmente 100% de todos os recursos disponíveis da CPU (também é multithread para o número de lógica disponível) núcleos na máquina).

Como tal, tenho um retorno de chamada dentro do loop de cálculo principal que o software que usa a biblioteca deve chamar:

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

No retorno de chamada, o cliente chama Suspensão (x) para diminuir a velocidade do encadeamento.

Originalmente, o código do lado do cliente era uma chamada de suspensão (100) fixa, mas isso levou a um desempenho não confiável, porque algumas máquinas terminam a matemática mais rapidamente que outras, mas a suspensão é a mesma em todas as máquinas. Portanto, agora o cliente verifica a hora do sistema e, se tiver passado mais de 1 segundo (que == várias iterações), ele será suspenso por meio segundo.

Essa é uma maneira aceitável de diminuir a velocidade de um thread? Devo usar um semáforo / mutex em vez de Sleep () para maximizar o desempenho? Dormir x milissegundos por cada 1 segundo de processamento funciona bem ou há algo errado que não estou percebendo?

A razão pela qual pergunto é que a máquina ainda está atolada, apesar de o taskman mostrar que o processo ocupa ~ 10% da CPU. Eu já explorei a contenção do disco rígido e da memória sem sucesso, então agora estou me perguntando se a maneira como estou diminuindo a velocidade do thread está causando esse problema.

Obrigado!

questionAnswers(5)

yourAnswerToTheQuestion