我有一个 GTK 窗口,里面有一个图像。我想改变这个形象。假设我有两个图像,“sun.png”和“moon.png”。每秒一次,我想接收“date -f%l”的输出以获取当前时间。如果时间在 7 点到 19 点之间(早上 7 点到晚上 7 点),我想显示 sun.png。否则,我想显示moon.png。
是否可以有一个带有while循环的单独线程,在程序运行时更改图像?我该怎么做呢?
顺便说一句,我正在用 C 语言编写。
我有一个 GTK 窗口,里面有一个图像。我想改变这个形象。假设我有两个图像,“sun.png”和“moon.png”。每秒一次,我想接收“date -f%l”的输出以获取当前时间。如果时间在 7 点到 19 点之间(早上 7 点到晚上 7 点),我想显示 sun.png。否则,我想显示moon.png。
是否可以有一个带有while循环的单独线程,在程序运行时更改图像?我该怎么做呢?
顺便说一句,我正在用 C 语言编写。
这不会是一个完整的答案,但是评论太长而且很重要。
您绝对不会通过一次进入一个休眠一秒钟的循环并调用外部date
命令并解析其输出以确定下一步做什么来实现这样的事情。这不仅比必要的工作多得多;更重要的是,它会在晚餐时吃掉用户的电池。
相反,您调用gettimeofday
orclock_gettime
来确定当前时间,然后计算未来下一次需要更改太阳/月亮图像的时间。然后,您在整个时间间隔内都睡到那个时间,即单次睡眠最多 12 小时。如果您的线程提早醒来(可能是从信号等),那么您只需在gettimeofday
再次调用时确定它还不是改变的时间,并计算一个新的持续时间以重新进入睡眠状态。这样,CPU 保持完全空闲(并且可以进入省电模式),除非有实际工作要做。
至于您是否可以在 GTK+ 中使用线程执行此操作,我很确定您可以,但我不熟悉 GTK+ API。