2017-04-11 22 views
0

Pythonではスレッドを使ってタイマーを作成/設定できますが、thread.start()が呼び出されるまで関数を実行できませんか?私は永遠のタイマーそうのような設定をしました:関数を実行しないでPythonタイマーを作成する

class perpetualTimer(): 
    enabled = False 
    Interval = 0 
    def __init__(self,t,hFunction): 
     print("init") 
     self.t=t 
     self.Interval = t 
     self.hFunction = hFunction 
     self.thread = Timer(self.t,self.handle_function) 

    def handle_function(self): 
     print("handle") 
     print(self.hFunction.__name__) 
     self.hFunction() 
     self.thread = Timer(self.t,self.handle_function) 
     self.thread.start() 

    def start(self): 
     print("start") 
     self.thread = Timer(self.Interval,self.handle_function) 
     self.thread.start() 

    def stop(self): 
     print("stop") 
     self.thread.cancel() 
def foo(): 
    print("foo") 

し、それを作成します。

tmr = perpetualTimer(5,foo()) 

し、プログラムを実行することにより、私は、「初期化」に続いて、「foo」というのプリントアウトを取得しますあなたは上のperpetualTimerを呼ぶ」と言う

tmr = perpetualTimer(5,foo()) 

を書くとき...私は望んでいないものを....私はちょうどそれが「初期化」

答えて

0

を印刷したいです5とfooの呼び出しの結果」を参照してください。これが "init"の前に "foo"が表示される理由です。あなたのコードを見てみると

あなたではなく関数への参照のみを渡す

tmr = perpetualTimer(5,foo) 

を探しているようにそれは私には思えます!問題を発見

+0

する必要がありますはい、私はすぐに質問を投稿した後ことを実現しました。ルーキーのエラー... – chadianscot

0

は:perpetualTimerへの呼び出し(5は、FOO())実際に

tmr = perpetualTimer(5,foo) 
関連する問題