2011-07-30 5 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 루프 내 두번째로 전환 : 그러나 여기

는 클라이언트 요청을 수용하기위한 제 2 스레드입니다 코드의 내 간단한 라인 .. 문제가있는 것입니다 스레드를 실행할 수 없습니다. 이 스레드를 병렬로 실행할 수있는 프로세스가 있습니까?하지만 이것을 구현하는 것은 매우 혼란 스럽습니다. 추가 정보가 필요하면 알려 드리겠습니다. 도와주세요 .. 미리 감사드립니다.

답변

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 신호에 콜백을 연결하십시오. 이 콜백은 mutex X을 릴리스하므로 두 번째 스레드가 대기를 멈추고 응답을 처리 할 수 ​​있습니다.

관련 문제