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

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

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

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

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

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

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

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

Спасибо!

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

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