4)软件
3.使用窗口显示CPU及GPU温度
网上查到获取CPU及GPU温度的方法,大部分是python的,自己拿C实现了一下,并且在gtk建立的窗口中显示,不再是显示在终端中。
gtk是刚入门,敲代码确实很繁琐。找到对应的文件IO函数以及shell指令的函数,实现python对应的功能。
提示一点,fopen读取后,要fclose再fopen数据才会刷新,不然数据是不变的。
下面是代码
#include <gtk/gtk.h> #include <stdio.h> FILE *fp; int CPUtemp; double GPUtemp; gchar str[100]; gint timeFun(GtkWidget *label); int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *frame; GtkWidget *label; gpointer data; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL); gtk_window_set_title(GTK_WINDOW(window), "温度显示"); gtk_window_set_default_size(GTK_WINDOW(window), 300, 100); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); //读取温度 fp = fopen("/sys/class/thermal/thermal_zone0/temp", "rt"); fscanf(fp, "%d", &CPUtemp); fclose(fp); fp = popen("/opt/vc/bin/vcgencmd measure_temp", "r"); fscanf(fp, "temp=%lf`C", &GPUtemp); pclose(fp); sprintf(str, "CPU温度:%0.1f°C\nGPU温度:%0.1f°C", (double)CPUtemp / 1000, GPUtemp); gtk_container_set_border_width(GTK_CONTAINER(window), 20); frame = gtk_frame_new("温度"); gtk_container_add(GTK_CONTAINER(window), frame); label = gtk_label_new(str); gtk_container_add(GTK_CONTAINER(frame), label); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); g_timeout_add(1000, (GSourceFunc)timeFun, label); gtk_widget_show_all(window); gtk_main(); return 0; } gint timeFun(GtkWidget *label) { fp = fopen("/sys/class/thermal/thermal_zone0/temp", "rt"); fscanf(fp, "%d", &CPUtemp); fclose(fp); fp = popen("/opt/vc/bin/vcgencmd measure_temp", "r"); fscanf(fp, "temp=%lf`C", &GPUtemp); pclose(fp); sprintf(str, "CPU温度:%0.1f°C\nGPU温度:%0.1f°C", (double)CPUtemp / 1000, GPUtemp); gtk_label_set_text(GTK_LABEL(label), str); return 1; }
编译方法见gtk设置