我有一個GTK窗口,裏面有圖像。我想要這個圖像改變。假設我有兩個圖像,「sun.png」和「moon.png」。每秒一次,我想要接收「date -f%l」的輸出以獲得當前小時。如果時間在7-19(上午7點到下午7點)之間,我想顯示sun.png。否則,我想顯示moon.png。我可以使用線程來更改GTK圖像嗎?
是否有可能有一個單獨的線程與while循環,在程序運行時更改圖像?我會如何去做這件事?
順便說一句,我正在C寫作。
我有一個GTK窗口,裏面有圖像。我想要這個圖像改變。假設我有兩個圖像,「sun.png」和「moon.png」。每秒一次,我想要接收「date -f%l」的輸出以獲得當前小時。如果時間在7-19(上午7點到下午7點)之間,我想顯示sun.png。否則,我想顯示moon.png。我可以使用線程來更改GTK圖像嗎?
是否有可能有一個單獨的線程與while循環,在程序運行時更改圖像?我會如何去做這件事?
順便說一句,我正在C寫作。
這不是一個完整的答案,但評論太長,這很重要。
你絕對不會執行類似這樣的事情,即進入循環睡眠一秒鐘,並調用外部date
命令並解析其輸出以確定下一步要做什麼。這不僅是比必要的更多的工作,更重要的是,它會在用餐時吃掉用戶的電池。
取而代之,您可以撥打gettimeofday
或clock_gettime
來確定當前時間,然後計算將來下一次需要更改太陽/月亮圖像的時間。然後,你一直睡到整個睡眠時間,例如一次睡12個小時。如果線程提前醒來(可能來自信號等),那麼您只需再次調用gettimeofday
即可確定還沒有時間更改,並計算新的持續時間以重新進入睡眠狀態。這樣,除非實際工作要做,否則CPU保持完全空閒狀態(並且可以進入省電模式)。至於你是否可以在GTK +中使用線程來做到這一點,我敢肯定你可以,但我不熟悉GTK + API。
我知道使用'gettimeofday'會更容易,我描述的情況只是一個例子。我打算編寫的程序更復雜。 – 2012-07-25 02:15:53
另一種選擇是使用alarm(),它在指定的秒數後發送SIGALRM信號。請記住,這些信號常常被忽視。 – Brady 2012-07-24 16:09:19