Лучший способ замедлить поток? Использование Sleep () в порядке?

Я написал библиотеку C ++, которая выполняет серьезную тяжелую работу с процессором (все это - математические вычисления и вычисления) и, если оставить ее на собственные устройства, будет легко потреблять 100% всех доступных ресурсов процессора (она также многопотоковая к числу доступных логических ядер на автомате).

Таким образом, у меня есть обратный вызов внутри основного цикла вычислений, который программное обеспечение, использующее библиотеку, должно вызывать:

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

В обратном вызове клиент вызывает Sleep (x), чтобы замедлить поток.

Первоначально клиентский код представлял собой фиксированный вызов Sleep (100), но это приводило к плохой ненадежной производительности, поскольку некоторые машины заканчивали математику быстрее, чем другие, но режим ожидания одинаков на всех машинах. Итак, теперь клиент проверяет системное время, и если прошло более 1 секунды (что == несколько итераций), он будет спать в течение полсекунды.

Это приемлемый способ замедления потока? Должен ли я использовать семафор / мьютекс вместо Sleep (), чтобы максимизировать производительность? Хорошо ли спит х миллисекунд за каждую 1 секунду обработки или что-то не так, что я не замечаю?

Причина, по которой я спрашиваю, состоит в том, что машина по-прежнему сильно перегружена, даже если таскман показывает, что процесс занимает ~ 10% процессорного времени. Я уже исследовал конфликты жесткого диска и памяти безрезультатно, так что теперь я задаюсь вопросом, вызывает ли способ, которым я замедляю поток, эту проблему.

Спасибо!

Ответы на вопрос(5)

Ваш ответ на вопрос