-1

Raspberry Pi で timer2 を使用できません

これがコードです

************************************************************** 
#  tmr2_tst_04.py
#  https://github.com/ask/timer2
#  http://pymotw.com/2/threading/index.html#thread-objects
# ISSUES:
#
#   *)  Seems to respond only to even seconds
#
#   *)  Is off by 1 second.  i.e.  4000 gives a 5 second interrupt

import timer2
import time       #  for sleep
import signal,sys

def signal_handler(signal, frame):
    print 'You pressed Ctrl+C!'
    timer.stop()
    sys.exit(0)

#time_to_wait = 4500
#time_to_wait = 4999
time_to_wait = 4000.0    #  gives 5-second cycle time !!!
#time_to_wait = 500.0     #  doesn't work

tm = 0
tdiff = 0
tm_old = -1
iter = 0
to_print = False

def hello():
    global iter
    global tm, tdiff
    global tm_old
    global to_print

    tm = time.time()
    tdiff = (tm - tm_old) if tm_old > 0  else  0
    tm_old = tm
    iter += 1


#   buf = "%3d %d %f %6.4f %s" % (iter, time_to_wait, tm, tdiff, "Hello world")
#   print buf
    to_print = True

#    Set up to catch ^C
signal.signal(signal.SIGINT, signal_handler)
print 'Press Ctrl+C to exit'

#   Set up timer interrupt routine
timer = timer2.Timer()
timer.apply_interval(time_to_wait, hello)



#  Main program loop
while iter <= 10000:
    if to_print:
        buf = "%3d %d %f %6.4f %s" % (iter, time_to_wait, tm, tdiff, "Hello world")
        print buf
        to_print = False
    time.sleep((time_to_wait/1000)/2)

timer.stop()

*************************************************************************

これにより、Raspberry Pi では 5000 ミリ秒ごとにスレッド「hello」が実行されますが、UBUNTU マシンでは 4000 ミリ秒ごとに実行されます。

2番目の問題-短い時間間隔で試してみると、

time_to_wait = 500

まったく機能しません。.1 ミリ秒の時間差でコードを圧縮するだけです。

4

1 に答える 1

0

Python の sleep 関数を呼び出しており、秒単位で引数を取ります。理想的には、これを 0.25 秒に変換しますが、関連する数値はすべて整数です。

整数として、500/1000 = 0、0/2 = 0 など。したがって、続行する前に、要求された 0 秒待機します。たとえば、1000 を 1000.0 に変更すると、機能するはずです。

于 2013-09-26T19:19:59.157 に答える