gpt4 book ai didi

c++ - 使用 C++ 在 Windows 下获取 Harddrrive 性能

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:04:21 25 4
gpt4 key购买 nike

我有一个问题分为几个部分,希望你能帮我解决。我正在尝试编写一些代码来帮助我在时间间隔内获得硬盘性能。

这基本上就像在 Windows 中的任务管理器下使用性能,如下图所示: enter image description here

但实际读取/写入字节数而不是读取速度。

为了做到这一点,我遵循了一些指南并最终得到了以下代码:

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- 我知道 dp.BytesRead 返回在 windows.h 库中定义的 long_integer。 我正在使用 long 它来保留结果。有没有更好的格式可以使用。2-我注意到每次返回读取都在增加,这意味着读取计数器不会在每次读取时重置。它是否正确?以及如何解决?

提前致谢。

最佳答案

最安全的方法是让您的函数返回 LARGE_INTEGERint64_t(因为 LARGE_INTEGER 是带符号的 64 位整数)。

保存上一次读取的值并将返回值减去该值。

int64_t disk_read_since_last_check() noexcept {
static int64_t previous_read=0;
//...
int64_t rv = dp.BytesRead.QuadPart - previous_read;
previous_read = dp.BytesRead.QuadPart;
return rv;
}

关于c++ - 使用 C++ 在 Windows 下获取 Harddrrive 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53363291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com