プロセスを構成するスレッドの一時停止/再開を繰り返し、目標とするCPU使用率の上限を超えないように制御する
プロセスに対して、直接的に一時停止/再開を指示するようなドキュメント化されたAPIはありません。(*1)そこで、一時停止/再開を行いたいプロセスに属するすべてのスレッドに対して一時停止/再開を実施するという方法が考えられます。
メリット
- スレッドの一時停止/再開は.net frameworkで実装されているので、手軽に実装できる。
デメリット
- スレッドが停止することを予期していないプロセスの場合(ほとんどのプロセスがそうだと思います)、スレッドの停止順番などにより、プロセスがクラッシュする可能性があるとのことです。
*1:
公式に文書化されていない Windows API である「NtSuspendProcess」を使用すれば、プロセスに対する一時停止/再開ができるようです。
プロセスを一時停止/再開するプログラム
http://d.hatena.ne.jp/UseRNamE/20100109/1263033000
How to suspend/resume a process in Windows? - Stack Overflow
http://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows