作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个问题分为几个部分,希望你能帮我解决。我正在尝试编写一些代码来帮助我在时间间隔内获得硬盘性能。
这基本上就像在 Windows 中的任务管理器下使用性能,如下图所示:
但实际读取/写入字节数而不是读取速度。
为了做到这一点,我遵循了一些指南并最终得到了以下代码:
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_INTEGER
或 int64_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/
我有一个问题分为几个部分,希望你能帮我解决。我正在尝试编写一些代码来帮助我在时间间隔内获得硬盘性能。 这基本上就像在 Windows 中的任务管理器下使用性能,如下图所示: 但实际读取/写入字节数而不
我是一名优秀的程序员,十分优秀!