我正在用套接字進行python監聽的應用程序。我已經使用了快速的規範(使用glade和gi.repository來製作gui)。但無論如何我都無法創建線程來監聽函數。我已經嘗試了很多方法,即使使用線程類和線程。線程類。 我是新來的快速和線程完全。 我嘗試了所有在互聯網上:-),但找不到任何解決方案。當我使用thread.start()時,它會等到gui關閉。當我使用thread.run()時,它會退出gui並立即運行讓gui無法響應的函數。以下是我用於線程類的示例代碼。如果需要,我可以上傳整個文件,因爲這是一個開源項目。請幫幫我。在python中快速執行線程(套接字監聽)
def listen(self):
print "working"
#listen to any incoming connections
#self.control_sock_in.listen(1)
i=0
while True:
print "it works"
#conn,addr = self.control_sock_in.accept()
#data = conn.recv
#if there is any incoming connection then check for free slot and reply with that free slot
#if change of status message then update nodelist
def on_btn_create_n_clicked(self, widget):
self.btn_quit_n.set_sensitive(True)
self.btn_join_n.set_sensitive(False)
self.btn_create_n.set_sensitive(False)
subprocess.check_call(["sudo", "ifconfig", "wlan0", "192.168.0.5", "netmask", "255.255.255.0", "broadcast", "192.168.0.255"])
self.control_sock_in = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.control_sock_in.bind(('192.168.0.5', 6000))
self.status_lbl.set_text("Created the network successfully with IP of 192.168.0.5!")
self.nodelist['192.168.0.5'] = ('6000','0')
#start thread on listen()
thread.start_new_thread(self.listen,(self,))
self.btn_camera.set_sensitive(True)
self.btn_mixer.set_sensitive(True)
self.btn_display.set_sensitive(True)
順便說一句,沒有必要爲我提供缺少代碼的評論項目。我可以做到。我堅持的是線程問題。
感謝您的回答。但問題依然存在。函數'listen'僅在GUI關閉時執行。但是與非deamon線程不同,一段時間後會停止。不過,我希望兩個線程同時執行。 –
您能否介紹一下您的程序的功能?這聽起來很令人驚訝,它不起作用。即使您提供的代碼應該可以工作(但我認爲您應該將函數作爲線程的入口點更改爲入站版本--'thread.start_new_thread(ClassName.listen,(self,))' –
這是沒有問題的你提供的代碼實際上是一個'快速'的循環漏洞,它使用gi.builder對象從glade文件加載gui,第二個線程在調用gui之前不會啓動,我猜應該調用線程並初始化它會加載gui,但它是一個單獨的類,不能從那裏調用它。 –