スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Ruby]observerで簡易時計

まつもと直伝 プログラミングのオキテ

上記のページでobserverの使い方を読んだので、サンプルのコードを参考に、tkを使用して、簡単な時計を作成してみました。

require "observer"
require "tk"

#更新通知者
class Tick

include Observable

def tick
loop {
now = Time.now
#更新があったことを通知
changed
#監視者にパラメータを渡す(監視側ではupdateが呼ばれる)
notify_observers(now.hour, now.min, now.sec)
#1秒ごとの刻みに補正する
sleep 1.0 - Time.now.usec / 1000000.0
}
end

end

#監視者
class Clock

def initialize
#秒刻みが待ち状態となるため別スレッドで
@t = Thread.new{

Tk.root.title("Clock")
Tk.root.resizable(0, 0)

@label = TkLabel.new(
nil,
:text => "Tick Start!",
:bg => "#CCCC88",
:width => 20,
:height => 5
).pack

Tk.mainloop
}
sleep 1
end

def update(h, m ,s)
unless @t.status
#ウィンドウスレッドが終了した場合は処理終了
exit(0)
else
#時刻表示を更新
@label.text(sprintf("%02d:%02d:%02d", h, m, s))
end
end

end

#更新通知者インスタンス生成
tick = Tick.new
#更新通知者と監視者を関連づける
tick.add_observer(Clock.new)
#更新通知者実行
tick.tick

実行すると・・
簡易時計

コメントの投稿

非公開コメント

プロフィール

jou4

Author:jou4
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。