2011-07-30 50 views
0

我正在開發一個像netmeeting這樣的聊天應用程序。我想分開線程一個是爲GUI(gtk.main)另一個是同時接受客戶端聊天請求(socket.accept)。但是有一個問題..在Pygtk中使用線程

這裏是我的代碼,簡單的線條是第二個線程接受客戶端請求:

while True: 
    self.new_sock,self.client_addr = self.sock.accept() 
    #CloseDialog is a messege box 
    respons=self.CloseDialog.run() 
    if respons==gtk.RESPONSE_YES: 
     #Call a Chat Window   
    elif respons==gtk.RESPONSE_NO: 
     #Close the requested socket 

當我運行該應用程序將其切換到gtk.main環和我的第二個線程無法運行。是否有任何進程並行地運行這些線程,但我很困惑實現這一點。如果你需要更多的信息,我會給你。請幫助我.. 在此先感謝

回答

1

看看PyGTK FAQ。特別是,我建議採用gobject.idle_add()的方法。當你的第二個線程需要任何GUI交互,安排)一些代碼在`gobject.idle_add(主線程中運行,有點像這樣:

def ask_close(): 
    self.CloseDialog.run() 
gobject.idle_add (ask_close) 

然後你需要等待一些互斥X何時答案(在主線程中)到達。我也建議不要使用模態對話框(run()),因爲這在很大程度上破壞了具有多個線程的目的。相反,使用present()並將回調連接到response信號。這個回調將釋放互斥體X,以便第二個線程可以停止等待並處理答案。