首页 > 解决方案 > 这段代码的 pygame 部分有什么问题?

问题描述

每次我运行这个程序时,pygame 窗口都会冻结。我正在使用窗户。除了弹出 pygame 窗口外,其他一切正常。请帮忙!我已经看到这里的一些帖子建议使用pygame.event.get(),但它对我不起作用!

class DriveDataHandler(socketserver.BaseRequestHandler):
class VideoStreamHandler(socketserver.StreamRequestHandler):   
class Server(object):
    def __init__(self, host, port1,port3):
        self.host = host
        self.port1 = port1
        #self.port2 = port2
        self.port3 = port3

        pygame.init()
        pygame.display.set_mode((250, 250))
    def video_stream(self, host, port):
        s = socketserver.TCPServer((host, port), VideoStreamHandler)
        s.serve_forever()
    def sensor_stream(self, host, port):
        s = socketserver.TCPServer((host, port), SensorDataHandler)
        s.serve_forever()
    def drive_stream(self, host, port):

        s = socketserver.TCPServer((host, port), DriveDataHandler)
        s.serve_forever()
    def start(self):

f __name__ == '__main__':
    h, p1, p3 = "127.0.1.1", 8000, 8004

    ts = Server(h, p1, p3)
    ts.start()

标签: pythonpygame

解决方案



class Server(object):
    def __init__(self, host, port1,port3):
        self.host = host
        self.port1 = port1
        #self.port2 = port2
        self.port3 = port3


    def video_stream(self, host, port):

        s = socketserver.TCPServer((host, port), VideoStreamHandler)
        s.serve_forever()

    def sensor_stream(self, host, port):

        s = socketserver.TCPServer((host, port), SensorDataHandler)
        s.serve_forever()

    def drive_stream(self, host, port):

        s = socketserver.TCPServer((host, port), DriveDataHandler)
        s.serve_forever()

    def start(self):
        drive_thread = threading.Thread(target=self.drive_stream, args=(self.host, self.port3))
##        sensor_thread = threading.Thread(target=self.sensor_stream, args=(self.host, self.port2))
##        sensor_thread.daemon = True #this thread will be killed after the main program exits
##        sensor_thread.start()
        drive_thread.daemon = True
        drive_thread.start()

        video_thread = threading.Thread(target=self.video_stream, args=(self.host, self.port1))
        video_thread.daemon = True #this thread will be killed after the main program exits
        video_thread.start()

        pygame.init()
        pygame.display.set_mode((250, 250))
        finish = False
        while not finish:
            events = pygame.event.get()
            for e in events:
                if e.type == pygame.QUIT:
                    finish = True
        pygame.quit()

        #self.video_stream(self.host, self.port1)

然而,一旦你退出,你产生的所有线程会发生什么?您需要正确关闭服务器。


推荐阅读