|
我希望在一个Gtk/Gnome的窗口中显示动态的数据,比如gnome-system-monitor中可以显示CPU和内存的当前使用状况, 在Gnome面板的右下脚可以显示当前时间,请问编程是怎么实现的呢?
之前,我通过读取/proc/net/dev的方式写了一个测试网络流量的程序,图形界面是用FLTK实现的,在其中用一个循环加sleep>的方式,在循环中不断读取文件并动态显示数据。但这样就不能再接受用户的"stop"的按钮输入了,于是我研究了一下FLTK的源代码,并通过在循环中加入一个Fl::wait()的方法来解决这个问题(FLTK使用Fl::run来运行主循环,并在其中调用Fl::wait().)。但我发现这样的效果不太好,仔细的考虑一下,也觉得不是正确的解决之道,所以即使Gnome也可以用这样的方法,我也认为不妥——但还是想知道Gnome的实现:用gtk_main()开始主循环,其中是不是也有像wait这样的调用呢?
今天看了一下wmmemfree的代码(这是一个dockapps,也是实时显示内存使用状况的),它通过设置定时器和UNIX signal的方式,每隔两秒中调用一个draw_window(), 而其中又有一个update_window(),最终调用XLib来把采集的数据显示出来,而大概实际上就是使用重绘的方式对窗口上的一些区域进行更新:
- void update_window()
- {
- XCopyArea(display, buffer, iconwindow, gc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 0, 0);
- XCopyArea(display, buffer, window, gc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 0, 0);
- }
复制代码
我目前对于XLib还不了解,但我想知道的是Gnome是不是也可以用这种方式来重绘一些Widget。我通过一本<<Gnome应用程序开发指南>>(John R. Sheets)学习gtk, 但其中主要只是阐述了这个方面的主循环、信号连接和一些Widget, 而在Gtk的文档中似乎也没有看到有关的内容。
有哪位大侠能指教一二,感激不尽! |
|