我创建了一个线程,该线程应该显示经过的秒数。不幸的是,当我从getstr
模块使用curses
时,整个脚本都会停止,包括线程。我必须使用线程锁来阻止由于顺序重叠而打印出随机字符。
关于如何解决此问题或替代方案的任何建议都很棒!
在下面的示例中,window
和window2
已经设置好...
lock = threaing.Lock()
def main_function():
#starts thread
t1 = threading.Thread(target=time_calc,args=(window2,))
t1.start()
#Gets user input
while True:
data = window1.addstr(y,x,"Type something in!")
data = window1.getstr(y,x,5)
lock.acquire()
window1.erase()
txt = "You said: "+data
window1.addstr(y,x,txt)
lock.release()
def time_calc(window2):
current_count = 0
while True:
time += 1
text = "Time Count: "+str(time)
lock.acquire()
window2.erase()
window2.addstr(y,x,text)
lock.release()
time.sleep(1)
答案 0 :(得分:0)
我发现了我的代码存在的问题。由于某种原因,您无法运行线程,而我最初将我的main
函数称为线程。我想我应该在我的问题中说过这一点。抱歉
可能有一种在线程中运行线程的方法,但这对我没有作用。
lock = threading.Lock()
def call_threads():
t1 = threading.Thread(target=main_function,args=(window1,))
t1.start()
t2 = threading.Thread(target=time_calc,args=(window2,))
t1.start()
def main_function(window1):
#Gets user input
while True:
data = window1.addstr(y,x,"Type something in!")
data = window1.getstr(y,x,5)
lock.acquire()
window1.erase()
txt = "You said: "+data
window1.addstr(y,x,txt)
lock.release()
def time_calc(window2):
current_count = 0
while True:
time += 1
text = "Time Count: "+str(time)
lock.acquire()
window2.erase()
window2.addstr(y,x,text)
lock.release()
time.sleep(1)