0

その中に画像が入ったGTKウィンドウがあります。このイメージを変えてほしい。「sun.png」と「moon.png」の2つの画像があるとします。毎秒1回、「date -f%l」の出力を受信して​​、現在の時刻を取得したいと思います。時間が7〜19(午前7時〜午後7時)の場合、sun.pngを表示します。それ以外の場合は、moon.pngを表示します。

プログラムの実行中にイメージを変更する、whileループを含む別のスレッドを作成することは可能ですか?どうすればこれを行うことができますか?

ちなみに私はCで書いています。

4

1 に答える 1

2

これは完全な答えにはなりませんが、コメントするには長すぎるので重要です。

一度に1秒間スリープするループに入り、外部dateコマンドを呼び出してその出力を解析し、次に何をするかを決定することによって、このようなことを確実に実装することはできません。これは必要以上に多くの作業を行うだけではありません。さらに重要なことに、それは夕食のためにあなたのユーザーのバッテリーを食べるでしょう。

gettimeofday代わりに、またはを呼び出しclock_gettimeて現在の時刻を決定し、次に太陽/月の画像を変更する必要がある時刻を計算します。次に、その時間までの間隔全体、つまり1回の睡眠で最大12時間睡眠します。スレッドが早期にウェイクアップした場合(おそらくシグナルなどから)、再度呼び出しgettimeofdayたときに、まだ変更する時間ではないと判断し、スリープに戻るための新しい時間を計算します。このように、CPUは、実際に実行する作業がある場合を除いて、完全にアイドル状態のままになります(そして省電力モードに入ることができます)。

GTK +のスレッドでこれを実行できるかどうかについては、かなり確信していますが、GTK+APIには詳しくありません。

于 2012-07-24T15:11:07.297 に答える