我正在制作一个包含数字时钟的 X 应用程序。时钟以“hh:mm”的格式显示当前时间。我想掌握 Xlib,所以我只想使用 Xlib(没有其他工具包)。
时钟必须每分钟刷新一次。为了时钟的刷新,我想出了三个实现,但我无法判断哪个是最好的。请告诉我哪个是最好的。而且,如果有其他更好的实现,请告诉我。
第一个实现从事件循环内部刷新时钟。第二和第三个实现从事件循环外部刷新时钟。
第一个实现如下:在事件循环中,我使用 XEventsQueued 或 XPending 来知道剩余事件的数量。如果仍然没有事件,请检查当前时间,如果自上次刷新后已过去 1 分钟或更长时间,我会刷新时钟。如果还有一些事件,我会处理其他窗口事件。
第二种实现如下:我使用setitimer,间隔为1分钟。信号处理程序捕获 SIGALRM 并刷新时钟。
第三种实现如下:我使用pthread。线程函数刷新时钟并休眠 1 分钟,并且永远做同样的事情。
第一个实现是最简单的。但我怕它频繁重复事件循环并消耗CPU功率。
所有睡眠 1 分钟的方法都会漂移,因为你做其他操作,循环会花费 1 分钟多一点。
只需等待一分钟,时钟就会在一分钟内的任意时间滴答作响。这将导致时钟最多延迟一分钟。
而是计算到下一分钟的时间,并为该时间设置一个计时器。或者为那个时间设置一个事件。
在极少数情况下,1 分钟内没有事件,这将失败。
完全没问题。
完全没问题。