ограничение скорости чтения жесткого диска для программы c++

ограничение скорости чтения жесткого диска для программы c++

Есть ли способ ограничить скорость чтения программой файлов, не замедляя при этом саму программу?

решение1

В Windows Vista и выше вы можете установить приоритет ввода-вывода процесса. Это не ограничит скорость, но даст другим процессам приоритет над вашим процессом и позволит им получить приоритет. Для этого есть скрытые API, но, похоже, вы ищете инструмент. Когда вы устанавливаете приоритет процесса с помощью диспетчера задач на «Ниже нормы» или «В режиме ожидания», приоритет ввода-вывода также падает.

Этот вопрос на suepruser содержит больше информации:

Как изменить приоритет ввода-вывода процесса или потока в Win7?

Он также ссылается на этот проект, который позволяет вам устанавливать приоритет ввода-вывода.

http://sourceforge.net/projects/iopriority/

решение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;
}

Это имеет значение только если вы читаете фрагменты. Я полагаю, вы могли бы вывести из потока и перегрузить соответствующие методы. Начинает становиться немного противно. Но это простой и быстрый обходной путь, если вы не можете найти решение на более низком уровне.

Связанный контент