2
在驱动器G上有几个操作正在完成。我的程序应该从文件读取数据。当磁盘使用率非常高(> 90%)时,程序应该减慢读取速度,以免干扰其他使用磁盘的进程。
显然,我想,在调用get_data_from_file()
之后检查Disk Time
将导致计数器返回非常高的百分比,因为刚刚使用了该磁盘。你可以在image上看到。如何使用性能计数器控制从文件读取?
关于如何正确检查Disk Time
的建议?
PDH_HQUERY query;
PDH_HCOUNTER counter;
PdhOpenQuery(NULL, 0, &query);
PdhAddCounterA(query, "\\LogicalDisk(G:)\\% Disk Time", 0, &counter);
PdhCollectQueryData(query);
auto getDiskTime = [&]()->double
{
PDH_FMT_COUNTERVALUE fmtCounter;
PdhCollectQueryData(query);
PdhGetFormattedCounterValue(counter, PDH_FMT_DOUBLE, 0, &fmtCounter);
return fmtCounter.doubleValue;
};
for(...)
{
get_data_from_file();
print_done_percentage();
double diskUsage = getDiskTime();
if(diskUsage >= 90)
{
std::cout << "The disk usage is over << diskUsage << "%. I'll wait...
while(diskUsage >= 90)
{
diskUsage = getDiskTime();
Sleep(500);
}
}
}
我以完全相同的解决方案结束:)我登录删除我的文章,但你已经回答了:)但是,我仍然发现你的答案有帮助,因为我使用了C'CreateThread',并且我喜欢你的C++线程的用法。 – theateist 2014-09-04 02:34:49