Это редко требуется, и, возможно, приоритеты потоков являются лучшим решением, но, поскольку вы спросили, вам следует:
- выполнить небольшую часть вашей "солидной" работы, т.е. вычислений
- измерить, сколько времени занял шаг 1), допустим, это
twork
миллисекунд Sleep()
для (100/percent - 1)*twork
миллисекунд, где percent
- желаемая нагрузка - - вернитесь к 1.
Для того, чтобы это работало хорошо, вы должны быть очень осторожны в выборе размера «дроби» вычисления, а некоторые задачи сложно разделить.Отдельная дробь должна занять где-то между 40 и 250 миллисекундами или около того, если это займет меньше, издержки от сна и измерения могут стать значительными, если больше, иллюзия использования 10% CPU исчезнет, и вам будет казаться, что ваш потокколебание между 0 и 100% CPU (что и происходит в любом случае, но если вы делаете это достаточно быстро, то похоже, что вы берете только какой-то процент).Еще две вещи, на которые следует обратить внимание: во-первых, как упоминалось ранее, это уровень thread , а не уровень process ;во-вторых, ваша работа должна быть реальной работой ЦП, дисковый / аппаратный / сетевой ввод-вывод обычно требует много времени и не требует так много ЦП.