伊万的回答对我不起作用;我猜 xrandr 自 2013 年以来发生了变化?命令行工具xrandr
可以正确读取我的刷新率,但是它的源代码太复杂了,我不愿意复制它这样做的方式。相反,我选择笨拙地将工作委派给整个xrandr
程序。我的糟糕解决方案粘贴在下面。
请注意,当连接多个显示设备时,此解决方案可能不可靠,并且可能有一天xrandr
再次更改时会中断。
(pstream.h 由 Jonathan Wakely 的 PStreams 库提供,此处引用: https ://stackoverflow.com/a/10702464/1364776
我只是用它把命令的输出变成std::string
; 显然还有其他各种方法可以做到这一点,因此如果您愿意,可以使用其中一种。)
#include <pstream.h>
#include <cctype>
#include <cstdlib>
#include <cmath>
float getRefreshRate()
{
try
{
redi::ipstream queryStream("xrandr");
std::string chunk;
while (queryStream >> chunk)
{
auto rateEnd = chunk.find("*");
if (rateEnd != std::string::npos)
{
auto rateBeginning = rateEnd;
while (std::isdigit(chunk[rateBeginning]) || std::ispunct(chunk[rateBeginning]))
--rateBeginning;
++rateBeginning;
auto numberString = chunk.substr(rateBeginning, rateEnd - rateBeginning);
float rate = std::strtof(numberString.data(), nullptr);
if (rate != 0 && rate != HUGE_VALF)
return rate;
}
}
}
catch (...)
{
}
return 60; // I am not proud of any of this :(
}