2017-04-16 9 views
0

コードの重要な部分は最初の数行です。私はどのくらいの時間の後に戻るには が知りたいです。私はTimerがある時間後に関数を呼び出すことを知っていますが、それを返す方法はわかりません。threading Timer return from function

def rdt_rcv(conn, flag): 
    t2 = threading.Timer(5.0, rdt_rcv, return, [0, 0, 0, 0]) 
    t2.start() 
    # if timeout, return 
    #return None, None, None, None 
    field1 = conn.recv(BUFFER_SIZE) 
    field1 = int(field1) 
    field2 = conn.recv(BUFFER_SIZE) 
    field2 = int(field2) 
    if field2 != 0: 
     global ACK_received 
     ACK_received = 1 
    field3 = (conn.recv(BUFFER_SIZE)) 
    field3 = int(field3) 
    field4 = (conn.recv(BUFFER_SIZE)) 
    field4 = int(field4) 
    # stop timer 
    t2.cancel() 
    return field1, field2, field3, field4 
+0

これは、[タイムアウト・オン・関数呼び出し](http://stackoverflow.com/questions/492519/timeout-on-a-function-call)質問のちょうど特殊なケース重複しています。 – matusko

答えて

0

変更。

# stop timer 
t2.cancel() 
return field1, field2, field3, field4. 

to。

if t2.is_alive(): 
    # stop timer 
    t2.cancel() 
    return field1, field2, field3, field4. 
else: 
    return 0, 0, 0, 0 
関連する問題