これは完全な答えにはなりませんが、コメントするには長すぎるので重要です。
一度に1秒間スリープするループに入り、外部date
コマンドを呼び出してその出力を解析し、次に何をするかを決定することによって、このようなことを確実に実装することはできません。これは必要以上に多くの作業を行うだけではありません。さらに重要なことに、それは夕食のためにあなたのユーザーのバッテリーを食べるでしょう。
gettimeofday
代わりに、またはを呼び出しclock_gettime
て現在の時刻を決定し、次に太陽/月の画像を変更する必要がある時刻を計算します。次に、その時間までの間隔全体、つまり1回の睡眠で最大12時間睡眠します。スレッドが早期にウェイクアップした場合(おそらくシグナルなどから)、再度呼び出しgettimeofday
たときに、まだ変更する時間ではないと判断し、スリープに戻るための新しい時間を計算します。このように、CPUは、実際に実行する作業がある場合を除いて、完全にアイドル状態のままになります(そして省電力モードに入ることができます)。
GTK +のスレッドでこれを実行できるかどうかについては、かなり確信していますが、GTK+APIには詳しくありません。