6

我想每分钟向一个变量添加 1 而不会干扰已经运行的代码。

这是一个游戏,所以我希望在后台让木头+1、岩石+1、鱼+1 在用户不知情的情况下每分钟发生一次。

time.sleep 在这种情况下不起作用,因为它会暂停整个程序。

start=time.time()
#some code
end=time.time()
if end-start > 60:
    wood = wood+1
    rock = rock+1

我尝试在上面做一些事情,但无法让它连续计数。它仅测量#some 代码执行所需的时间。

任何帮助都会很棒!提前致谢。

4

4 回答 4

9

您需要在python中导入线程模块和itertools(除了svks'comment )

import thread, time, itertools

初始化你的线程安全计数器

wood = itertools.count().next()

并将您的计数器更新写入函数

def updateCounter():
   while True:
       wood.next()
       # wood += 1
       time.sleep(60)

并启动一个新线程

thread.start_new_thread(updateCounter, ())

但是像wood这样的资源变量必须可以从 counter 函数中访问!

于 2013-04-03T18:46:39.143 回答
5

这是一个不涉及线程的答案,因为线程可能很难正确处理。(如果您使用线程,则需要阅读线程之间的同步,否则您可能会遇到细微的错误。)

你可能有某种“主循环”。也许它看起来像这样,目前:

while game.running:
    game.process()

主循环没有什么神奇之处——除了处理输入和在屏幕上绘画之外,您还可以做其他事情。如果您希望每分钟运行一次,您可以简单地执行以下操作:

t0 = time.time()
while game.running:
    t1 = time.time()
    if (t1-t0) >= 60.0:
        game.wood += 1
        t0 = t1 
    game.process()

如果您使用某些库,您可能会将主循环隐藏在库中。在这种情况下,您可能或多或少地像这样开始您的游戏:

game.main() # this function doesn't return until your game exits

如果是这种情况,您的库中可能会有一个函数来执行与上述等效的操作——将代码设置为每隔一段时间或在指定的时间间隔执行一次。寻找“空闲功能”或“计时器”。

于 2013-04-03T19:05:24.910 回答
1

为此,您需要单独的线程来负责递增计数器。但请记住,将线程引入任何程序都会使其变得更加复杂。有关详细信息,请参阅线程文档

此外,您不确定特定线程每秒会获得处理器的时间,您可以假设但您不确定。

于 2013-04-03T18:47:41.360 回答
1

它将每 60 秒运行一次。

        try {
        while (true) {
            System.out.println(new Date());
            Thread.sleep(60 * 1000);
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
于 2014-03-20T09:39:27.840 回答