X11

Xlib:GUI數字時鐘的最佳實現是什麼?

  • March 6, 2022

我正在製作一個包含數字時鐘的 X 應用程序。時鐘以“hh:mm”的格式顯示目前時間。我想掌握 Xlib,所以我只想使用 Xlib(沒有其他工具包)。

時鐘必須每分鐘刷新一次。為了時鐘的刷新,我想出了三個實現,但我無法判斷哪個是最好的。請告訴我哪個是最好的。而且,如果有其他更好的實現,請告訴我。

第一個實現從事件循環內部刷新時鐘。第二和第三個實現從事件循環外部刷新時鐘。

第一個實現如下:在事件循環中,我使用 XEventsQueued 或 XPending 來知道剩餘事件的數量。如果仍然沒有事件,請檢查目前時間,如果自上次刷新後已過去 1 分鐘或更長時間,我會刷新時鐘。如果還有一些事件,我會處理其他視窗事件。

第二種實現如下:我使用setitimer,間隔為1分鐘。信號處理程序擷取 SIGALRM 並刷新時鐘。

第三種實現如下:我使用pthread。執行緒函式刷新時鐘並休眠 1 分鐘,並且永遠做同樣的事情。

第一個實現是最簡單的。但我怕它頻繁重複事件循環並消耗CPU功率。

第一個實現如下:在事件循環中,我使用 XEventsQueued 或 XPending 來知道剩餘事件的數量。如果仍然沒有事件,請檢查目前時間,如果自上次刷新後已過去 1 分鐘或更長時間,我會刷新時鐘。如果還有一些事件,我會處理其他視窗事件。

在極少數情況下,1 分鐘內沒有事件,這將失敗。

第二種實現如下:我使用setitimer,間隔為1分鐘。信號處理程序擷取 SIGALRM 並刷新時鐘。

完全沒問題。

第三種實現如下:我使用pthread。執行緒函式刷新時鐘並休眠 1 分鐘,並且永遠做同樣的事情。

完全沒問題。

所有睡眠 1 分鐘的方法都會漂移,因為你做其他操作,循環會花費 1 分鐘多一點。

只需等待一分鐘,時鐘就會在一分鐘內的任意時間滴答作響。這將導致時鐘最多延遲一分鐘。

而是計算到下一分鐘的時間,並為該時間設置一個計時器。或者為那個時間設置一個事件。

引用自:https://unix.stackexchange.com/questions/693091