首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写多线程kivy游戏(在rasp Pi上),该游戏可以同时收听端口

如何编写多线程kivy游戏(在rasp Pi上),该游戏可以同时收听端口
EN

Stack Overflow用户
提问于 2016-04-29 03:55:37
回答 1查看 215关注 0票数 0

我正在使用kivy(输出到7“显示)在Raspberry Pi上编写一个远程控制蛇游戏。游戏运行时,套接字应该会监听端口。然而,事实证明,游戏循环和socketIO的等待循环不能一起运行。我尝试了多线程,但它没有像预期的那样工作。

socketIO代码:

代码语言:javascript
复制
from socketIO_client import SocketIO, BaseNamespace
class Namespace(BaseNamespace):
    def on_connect(self):
        print('[Connected]')
    def on_message(self,packet):
        print packet
        self.get_data(packet)        

    def get_data(self, packet):        
        if(type(packet) is str):
            matches = re.findall(PATTERN, packet)            
            if(matches[0][0]=='2'):                
                dataMatches = re.findall(DATAPATTERN, matches[0][4])
                print dataMatches
                ......

main的代码肯定不起作用:

代码语言:javascript
复制
if __name__ == '__main__':
    MyKeyboardListener() #keyboard listener, works fine
    SnakeApp().run()
    socketIO = SocketIO('10.0.0.4',8080,Namespace)
    socketIO.wait()

我尝试了以下多线程处理,但没有成功:

代码语言:javascript
复制
if __name__ == '__main__':
    MyKeyboardListener() #keyboard listener, works fine
    threading.Thread(target = SnakeApp().run).start() #results in abort
    socketIO = SocketIO('10.0.0.4',8080,Namespace)
    socketIO.wait()

上面的代码导致程序以错误消息中止:“致命的Python错误:(游戏降落伞)分段错误中止”。

我还尝试了另一种多线程方法,但它也没有起作用。这真是令人沮丧。有没有办法让游戏循环和socketIO的等待循环同时运行?还是我漏掉了什么?

更新:main的工作代码:

代码语言:javascript
复制
def connect_socket():
    socketIO = SocketIO('10.0.0.4',8080,Namespace)
    socketIO.wait()
if __name__ == '__main__':
    MyKeyboardListener() #keyboard listener, works fine
    socketThread = threading.Thread(target = connect_socket) #creat thread for socket
    socketThread.daemon = True #set daemon flag
    socketThread.start()
    SnakeApp().run
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-29 10:06:54

您应该在主线程中运行kivy主循环,在辅助线程中运行套接字列表(与您的第二次尝试相反)。

但是当你简单地关闭它时,它会让你的应用程序挂起,因为尽管主线程已经死了,次线程仍然会保持它的活力。

这个问题的最简单的解决方案是使用daemon = True标志启动二级线程,这样主线程死后它就会被杀死。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36929270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档