![限制程序c++的硬盘读取速度](https://linux22.com/image/1336177/%E9%99%90%E5%88%B6%E7%A8%8B%E5%BA%8Fc%2B%2B%E7%9A%84%E7%A1%AC%E7%9B%98%E8%AF%BB%E5%8F%96%E9%80%9F%E5%BA%A6.png)
有没有办法可以限制程序读取文件的速度,而不会减慢程序本身的速度?
答案1
在 Windows Vista 及更高版本中,您可以设置进程的 I/O 优先级。这不会限制速率,但会使其他进程优先于您的进程,并允许它们优先。有隐藏的 API 可以做到这一点,但您似乎正在寻找一个工具。当您使用任务管理器将进程优先级设置为低于正常或空闲时,I/O 优先级也会下降。
suepruser 上的这个问题有更多信息:
它还链接到这个允许您设置 I/O 优先级的项目。
答案2
不确定硬件或特定于操作系统的解决方案...但显而易见(原谅粗鲁的实现):
const long long maxBytesPerSec = 1048576;
static long long bytesRead = 0;
static long long secondsElapsed = 1;
istream & ReadBytesThrottled( istream & s, char * buffer, long long bytesToRead )
{
while( (bytesRead+bytesToRead) / secondsElapsed > maxBytesPerSec ) {
// Wait and update secondsElapsed
}
s.read(buffer, bytesToRead);
if( s.good() ) bytesRead += bytesToRead;
return s;
}
void ResetThrottle()
{
bytesRead = 0;
secondsElapsed = 1;
}
这只在你读取块时才有意义。我想你可以从流中派生并重载相关方法。开始有点恶心。但如果你找不到较低级别的解决方案,这是一个简单而快速的解决方法。