C ++ Linux:获取显示器的刷新率

在Windows中,winapi提供了一个报告监视器信息的函数:

DEVMODE dm; dm.dmSize = sizeof(DEVMODE); EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm); int FPS = dm.dmDisplayFrequency; 

Linux上的这个相当于什么? Linux的手册页指导我一个快板库function,但不仅我不使用快板,该function是从一个非常过时的版本的库,并报告只适用于Windows。

使用XRandr API(man 3 Xrandr)。 看这里的一个例子:

您也可以查看xrandr(1)的代码。


编辑1:为了后代的缘故:

示例代码略微调整,以便更多的演示:

 #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <iostream> #include <unistd.h> #include <X11/Xlib.h> #include <X11/extensions/Xrandr.h> int main() { int num_sizes; Rotation current_rotation; Display *dpy = XOpenDisplay(NULL); Window root = RootWindow(dpy, 0); XRRScreenSize *xrrs = XRRSizes(dpy, 0, &num_sizes); // // GET CURRENT RESOLUTION AND FREQUENCY // XRRScreenConfiguration *conf = XRRGetScreenInfo(dpy, root); short current_rate = XRRConfigCurrentRate(conf); SizeID current_size_id = XRRConfigCurrentConfiguration(conf, &current_rotation); int current_width = xrrs[current_size_id].width; int current_height = xrrs[current_size_id].height; std::cout << "current_rate = " << current_rate << std::endl; std::cout << "current_width = " << current_width << std::endl; std::cout << "current_height = " << current_height << std::endl; XCloseDisplay(dpy); } 

编译:

 g++ 17797636.cpp -o 17797636 -lX11 -lXrandr 

输出:

 $ ./17797636 current_rate = 50 current_width = 1920 current_height = 1080