如何杀死使用输入的线程?
How to kill a thread that uses an input?
我正在尝试使用套接字和线程制作在线游戏。这是一款竞争激烈的刽子手游戏,最快完成单词的人获胜。我想要的是,当其中一名玩家 wins/runs 生命结束时,另一名玩家被踢出游戏并被告知他们有 won/lost。但是,我 运行 遇到了问题。
1:如果我使用“threading”,没有办法关闭线程(因为程序需要读取用户输入,所以我需要使用input()函数,这意味着播放器的线程不能'在他们插入一个字符之前不会被终止。
2:如果我使用“multiprocessing”(它有一个 terminate() 函数),我不能使用 input()(multiprocessing 不允许)。
我陷入了僵局,我该怎么办?
P.D: 这是我第一个Whosebug post,如果写错了请告诉我post!
好的,我明白了,这是一个丑陋而复杂的解决方案,但它确实有效。
我创建了一个模拟“输入”命令的程序,而不是输入命令本身(因此它不会停止进程)。
这是:
import pynput.keyboard
global string
string=""
c=0
global oldprinted
oldprinted=""
def GetInput():
import pynput
def on_press(key):
global oldprinted
global string
if key==pynput.keyboard.Key.enter:
listener.stop()
else:
prompt="Introduce your input: "
try:
if key==pynput.keyboard.Key.backspace and len(string)>0:
string=string[:-1]
else:
string+=str(key.char)
prompt+=(string)
print(" "*len(oldprinted),end="\r")
print(prompt,end="\r")
oldprinted=prompt
except:
pass
print("Introduce your input: ",end="\r")
with pynput.keyboard.Listener(suppress=True,on_press=on_press) as listener:
listener.join()
return string
data=GetInput()
print("\n")
我正在尝试使用套接字和线程制作在线游戏。这是一款竞争激烈的刽子手游戏,最快完成单词的人获胜。我想要的是,当其中一名玩家 wins/runs 生命结束时,另一名玩家被踢出游戏并被告知他们有 won/lost。但是,我 运行 遇到了问题。
1:如果我使用“threading”,没有办法关闭线程(因为程序需要读取用户输入,所以我需要使用input()函数,这意味着播放器的线程不能'在他们插入一个字符之前不会被终止。
2:如果我使用“multiprocessing”(它有一个 terminate() 函数),我不能使用 input()(multiprocessing 不允许)。
我陷入了僵局,我该怎么办?
P.D: 这是我第一个Whosebug post,如果写错了请告诉我post!
好的,我明白了,这是一个丑陋而复杂的解决方案,但它确实有效。 我创建了一个模拟“输入”命令的程序,而不是输入命令本身(因此它不会停止进程)。 这是:
import pynput.keyboard
global string
string=""
c=0
global oldprinted
oldprinted=""
def GetInput():
import pynput
def on_press(key):
global oldprinted
global string
if key==pynput.keyboard.Key.enter:
listener.stop()
else:
prompt="Introduce your input: "
try:
if key==pynput.keyboard.Key.backspace and len(string)>0:
string=string[:-1]
else:
string+=str(key.char)
prompt+=(string)
print(" "*len(oldprinted),end="\r")
print(prompt,end="\r")
oldprinted=prompt
except:
pass
print("Introduce your input: ",end="\r")
with pynput.keyboard.Listener(suppress=True,on_press=on_press) as listener:
listener.join()
return string
data=GetInput()
print("\n")