2011-03-17 8 views
1

간단한 채팅 클라이언트 용 코드를 파이썬으로 작성하고 있습니다. GUI와 문자열 및 기타 데이터를 저장하는 PHP 서버가 있습니다. 내 코드가 채팅 (대화 텍스트 필드)을 1 초마다 업데이트 할 수 있도록하고 싶습니다. 나는 userX (즉, 사용자 1 일 또는 사용자 2 수)를 표시하는 새 메시지가있는 경우 각 초를 확인 뭔가를해야 할이 시점에서다중 스레딩 프로세스 실행

Initialize Gui 
Setup Users 
UserX write messageX 
messageX sent to server 

: 나는 의사 코드의 비트를 게시 할 수 있습니다. 다음과 같이 입력하면 :

while True: 
    time.sleep(1) 
    checkAndDisplayNewMessages() 

GUI가 표시되지 않습니다. 코드 끝 부분에 mainloop()

다시 시작하려면 사용자가 비동기 적으로 메시지를 보내고받을 수있는 코드를 제공해야합니다. 사용자가 메시지를 입력하고 다른 부분이 프로그램 실행 중에 끊임없이 새 메시지를 확인하는 경우 메시지를 보내는 코드가 포함되어 있습니다.

+0

이 질문을 편집 할 수 있습니다. 형식 지정 조언을 위해 페이지의 오른쪽을주의 깊게보십시오. 코드를 코드처럼 보이게 만드십시오. –

답변

0

응용 프로그램의 기본 스레드에서 새 메시지를 가져 오는 방법을 분리해야합니다. 즉, 쉽게 파이썬에서 threads 수행 할 수 있습니다, 그것은 다음과 같이 보일 것입니다 :

import threading 

def fetch_messages(ui): 
    while not ui.ready(): 
     #this loop syncs this process with the UI. 
     #we don't want to start showing messages 
     #until the UI is not ready 
     time.sleep(1) 

    while True: 
     time.sleep(1) 
     checkAndDisplayNewMessages() 

def mainlogic(): 
    thread_messages = threading.Thread(target=fetch_messages,args=(some_ui,)) 
    thread_messages.start() 
    some_ui.show() # here you can go ahead with your UI stuff 
        # while messages are fetched. This method should 
        # set the UI to ready. 

이 구현은 UI를 시작합니다 또한 많은 메시지를 추구하는 병렬 과정에서 실행됩니다. UI가 메시지를 찾는 프로세스와 동기화되는 것이 중요합니다. 그렇지 않으면 재미있는 예외가 발생할 것입니다. 이것은 fetch_messages 함수의 첫 번째 루프에 의해 달성됩니다.