LoginSignup
0
1

More than 3 years have passed since last update.

whileループで使用するタイマー

Last updated at Posted at 2020-04-10

やりたいこと

低温調理器の作成用に、タイマーを作成しました。
流儀的には、threadingを使用するのが良いのかなと思いましたが、自分の知識の範囲でさくっと作ってみました。

whileループでの使用を想定しておりまして、設定時間内であればTrueを返し続け、設定時間を超えるとFalseを返すという仕様です。
タイマーは、インターバルと、処理時間を事前に設定し稼働させます。

インターバルの時間を短くすると、処理時間の精度が向上します。

処理時間に求められる精度は、用途によってまちまちなので可変にしました。

低温調理の場合は、処理時間が数時間となることが多いのでさほど短いインターバルで回さなくても大丈夫でしょう。

python
import sys
import time

print('何時間後にとめますか?')
hour = float(input())
set_time = hour * 60*60
print(str(set_time) + '秒後にとめますね')

print('カウント間隔')
interval = float(input())
print(str(interval) + 'sec 間隔で数えます')

class Countdown_Timer:
    def Timer(self,t):
        time_now = time.time()
        delta_time = time_now - start_time
        while delta_time < t:
            time_now = time.time()
            delta_time = time_now - start_time
            time.sleep(interval)
            flag = True
            return flag
        else:
            global time_measured
            time_measured = delta_time
            flag = False
            return flag


timer = Countdown_Timer()
start_time = time.time()

print('start Timer')
while timer.Timer(set_time):  
#    print('Timer On')
    pass
else:
    print('Timer Off')
    print('時間は ' + str(time_measured)+' 秒でした。')
    print('誤差は ' + str(time_measured - set_time) + ' 秒です。')

低温調理では、処理時間を時間単位で設定することが多いため、処理時間の入力を時間単位としています。

起動すると、こんな感じになります。

>input()のエコーをなくしたい。

何時間後にとめますか?
0.002
7.199999999999999秒後にとめますね
カウント間隔
0.3
0.3sec 間隔で数えます
start Timer
Timer Off
時間は 7.243600845336914 秒でした。
誤差は 0.04360084533691477 秒です。
0
1
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1