我想每分钟为变量添加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代码执行所需的时间。
任何帮助都会很棒!提前谢谢。
答案 0 :(得分:7)
您需要在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 这样的资源变量必须可以从计数器函数中访问!
答案 1 :(得分: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
如果是这种情况,您的库中可能会有一个函数来执行与上述相同的操作 - 设置代码可以每隔一段时间或以指定的时间间隔执行。寻找“空闲功能”或“定时器”。
答案 2 :(得分:1)
要执行此操作,您需要单独的线程来负责递增计数器。但请记住,将线程引入任何程序会使其更复杂。有关详细信息,请参阅threading docs。
此外,您不确定特定线程每秒会得到处理器的时间,您可以假设但是您不确定。
答案 3 :(得分:1)
它将每60秒运行一次。
try {
while (true) {
System.out.println(new Date());
Thread.sleep(60 * 1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}