如何在不影响其余部分的情况下延迟程序的一部分?
How to delay a part of my program without affecting the rest?
我有一个使用计分器的程序。该分数计数器最初为 100,并保持这种状态,直到超过某个阈值。阈值变量称为shipy
,我的分数称为score
。
一旦 shipy
超过 400,我就会每 0.1 秒从我的分数中减去 1,但这样做会导致我的整个程序 运行 变慢。
这是我的代码片段:
shipy = 0
score = 100
# some code here doing something, eg. counting shipy up
if shipy > 400:
time.sleep(0.1)
global score
score-=1
# more code doing something else
有没有办法 运行 独立于代码的其余部分减去分数?
您的程序需要采用 "run to completion" 风格。
因此,给定一个 time_now()
函数,其中 returns 当前时间(以秒为单位),您可以编写如下代码:
prev_time = time_now()
while True:
run_program() # Your program runs and returns
curr_time = time_now()
if curr_time - prev_time >= 1:
prev_time += 1
if shipy > 400:
score -= 1
这样,您在 run_program()
中的代码就可以执行它必须执行的操作,但 returns 会尽快执行。上面的其余代码从不循环等待时间,而是只在应该运行的时候运行。
处理 score
后,您可以看到再次调用了 run_program()
。
这只是原理。实际上,您应该将 shipy
的检查合并到 run_program()
函数中。
此外,它在单线程中运行,因此不需要信号量来访问 shipy
或 score
。
您需要使用不同的线程来计算分数。刚开始一个新线程来倒计时你的分数。
import threading
import time
def scoreCounter():
while shipy > 400:
time.sleep(0.1)
global score
score-=1
t1 = threading.Thread(target=scoreCounter)
如果 shipy > 400
.
,则只需在代码中的某个位置调用 t1.start()
看看这个多线程程序。
- 主程序打印"Here you can do other stuff"然后等待你回车
- 另一个并行函数正在递增变量
i
并打印它
我让你试试这个:
import threading
import time
def main_function():
global continuer_global, i
i = 0
t1 = threading.Thread(target = counter)
t1.daemon = True # With this parameter, the thread functions stops when you stop the main program
t1.start()
print("Here you can do other stuff")
input("Press Enter to exit program\n")
def counter ():
# Do an action in parallel
global i
while True:
print("i =", i)
i += 1
time.sleep(1)
main_function()
我有一个使用计分器的程序。该分数计数器最初为 100,并保持这种状态,直到超过某个阈值。阈值变量称为shipy
,我的分数称为score
。
一旦 shipy
超过 400,我就会每 0.1 秒从我的分数中减去 1,但这样做会导致我的整个程序 运行 变慢。
这是我的代码片段:
shipy = 0
score = 100
# some code here doing something, eg. counting shipy up
if shipy > 400:
time.sleep(0.1)
global score
score-=1
# more code doing something else
有没有办法 运行 独立于代码的其余部分减去分数?
您的程序需要采用 "run to completion" 风格。
因此,给定一个 time_now()
函数,其中 returns 当前时间(以秒为单位),您可以编写如下代码:
prev_time = time_now()
while True:
run_program() # Your program runs and returns
curr_time = time_now()
if curr_time - prev_time >= 1:
prev_time += 1
if shipy > 400:
score -= 1
这样,您在 run_program()
中的代码就可以执行它必须执行的操作,但 returns 会尽快执行。上面的其余代码从不循环等待时间,而是只在应该运行的时候运行。
处理 score
后,您可以看到再次调用了 run_program()
。
这只是原理。实际上,您应该将 shipy
的检查合并到 run_program()
函数中。
此外,它在单线程中运行,因此不需要信号量来访问 shipy
或 score
。
您需要使用不同的线程来计算分数。刚开始一个新线程来倒计时你的分数。
import threading
import time
def scoreCounter():
while shipy > 400:
time.sleep(0.1)
global score
score-=1
t1 = threading.Thread(target=scoreCounter)
如果 shipy > 400
.
t1.start()
看看这个多线程程序。
- 主程序打印"Here you can do other stuff"然后等待你回车
- 另一个并行函数正在递增变量
i
并打印它
我让你试试这个:
import threading
import time
def main_function():
global continuer_global, i
i = 0
t1 = threading.Thread(target = counter)
t1.daemon = True # With this parameter, the thread functions stops when you stop the main program
t1.start()
print("Here you can do other stuff")
input("Press Enter to exit program\n")
def counter ():
# Do an action in parallel
global i
while True:
print("i =", i)
i += 1
time.sleep(1)
main_function()