一个Gam的Python计时器

2024-05-16 00:51:32 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我编程的游戏里的计时器:

def function(event):
    time.sleep(.2)
    tx2 = time.time()
    if tx2-tx1 > 0.7:
        #do the repetitive stuff here
    return function(1)

tx1 = time.time()

thread.start_new_thread(function,(1,))

有没有更好的方法来写这个? 在我看来,调用递归函数和新线程有点脏。。。 而且过了一段时间它就崩溃了。。。在


Tags: theevent游戏iftimedef编程function
1条回答
网友
1楼 · 发布于 2024-05-16 00:51:32

您当前的示例遇到了递归限制的问题,因为它递归地调用自己。堆栈大小继续增长,直到达到默认值1000为止,这很有可能。请参见这个修改后的示例:

import time
import inspect
import thread

tx1 = time.time()

def loop(event):
    print "Stack size: %d" % len(inspect.stack())
    tx2 = time.time()
    if tx2-tx1 > 0.7:
            print "Running code."
    return loop(1)

thread.start_new_thread(loop, (1,))   
time.sleep(60)

## OUTPUT ##
Stack size: 1
Running code.
Stack size: 2
Running code.
...
Stack size: 999
Running code.
Exception RuntimeError: 'maximum recursion depth exceeded in ...

使用自定义线程类可能是最简单的,该类可以一直运行,直到您告诉它停止为止。这样堆栈大小就不会持续增长。它只是循环并调用处理程序函数。 下面是一个完整的工作示例:

^{pr2}$

相关问题 更多 >