У меня есть вопрос, разделенный на несколько частей, и надеюсь, вы поможете мне решить его.Я пытаюсь написать некоторый код, чтобы помочь мне получить производительность жесткого диска в промежуток времени.
Это было бы в основном похоже на использование производительности в диспетчере задач в окнах, как показано на следующем рисунке:
, но вместо скорости чтения фактическое число для чтения / записибайтов.
Я выполнил некоторые инструкции, чтобы получить следующий код:
HANDLE OpenTarget(PCWSTR lpName)
{
HANDLE hTarget;
hTarget = CreateFile(lpName,
0,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
return hTarget;
}
long total_disk_read() noexcept {
HANDLE hTarget = OpenTarget(wszDrive);
if (hTarget == INVALID_HANDLE_VALUE)
{
LOG(error) << "Failed to get Disk info, code: " << GetLastError();
return 0 ;
}
DISK_PERFORMANCE dp = { 0 };
DWORD cbOutBufferSize = sizeof(DISK_PERFORMANCE);
DWORD cbBytesReturned = 0;
LPVOID lpOutBuffer = (LPVOID)&dp;
if (!DeviceIoControl(hTarget, IOCTL_DISK_PERFORMANCE, NULL, 0, lpOutBuffer, cbOutBufferSize, &cbBytesReturned, NULL))
{
LOG(error) << "Failed to get Disk Performance info, code: " << GetLastError();
CloseHandle(hTarget);
return 0 ;
}
else {
CloseHandle(hTarget);
return dp.BytesRead.QuadPart;
}
}
Теперь у меня два вопроса:
1- Iпонимать, что dp.BytesRead возвращает long_integer, определенный в lib.h windows.Я использую это долго, чтобы зарезервировать результаты.Есть ли лучший формат для использования.2- Я заметил, что каждый раз, когда возвращаемое чтение увеличивается, это означает, что счетчик чтения не сбрасывается при каждом чтении.Это правильно?и как это решить?
Заранее спасибо.