파이 게임에서 실행되는 멀티 플레이어 게임이 있습니다. 별도의 스레드에서 게임/클라이언트/서버를 실행하고 간단한 에코 서버가 있습니다. 플레이어가 메시지를 브로드 캐스트 할 때마다 다른 모든 플레이어가 메시지를받습니다. 내가 겪고있는 문제는 파이 게임에 매 10 밀리 초마다 화면을 다시 그리는 while (true) 루프가 있다는 것입니다. 이 루프는 루프 밖에서는 아무 것도 할 수 없으므로 게임 월드가 업데이트되지 않게합니다. 나는 while 루프에서 대기열에서 큐를 제거하려고 시도했지만 명령을 처리 할 수는 있지만 작동하지 않는 것 같습니다 (q.put()은 대기열에 아무 것도 넣지 않습니다).파이 게임 다중 스레드
도움을 주셨습니다. 난 당신이주의 깊게 대기열 문서 http://docs.python.org/2/library/queue.html 및 스레딩 문서 http://docs.python.org/2/library/threading.html을 읽을 제안
class Client(Thread, Observer):
#waits for notifications from ClientSocket
#starts the game loop
#enqueue commands in the Game
class ClientSocket(Thread, Observable):
#observes the socket and notifies the Client
class Server(Thread):
#simply broadcasts commands to ClientSocket(s)
class Game(Thread):
def __init__(self):
self.q = queue.Queue()
while True:
#delay 10 ms
#redraw
#see if u need to process queue
당신은 'CPython'이 진정으로 동시 적이 아니며'GIL' 권한으로 인해 한 번에 하나의 스레드 만 실행한다는 것을 알고 있습니까? –
흠, 그래서 내가 시도 할 수있는 아이디어가 있습니까? 내 채팅은 완벽하게 작동하지만 파이 게임이 모든 것을 망가뜨리는 것 같습니다. – 1337holiday
더 많은 코드를 게시하면 더 좋을 것입니다. Game 클래스에서 주 루프를 run() 메소드 안에 두시겠습니까? Client 클래스에서 game.start()를 사용하고 있습니까? – pmoleri