문제가 생겼습니다 : 내 메인 스레드가 시작되어 약 10-15 초 실행해야하는 스레드에 참여해야합니다.GObject.idle_add(), thread.join() 및 내 프로그램이 응답하지 않습니다.
그래서 : 메인 스레드가 필요합니다 :
- 내 메인 스레드는 내 메인 스레드가 하위 스레드을
- 을 조인 10 ~ 15 초 정도 실행하는 자식 스레드, 시작 자식 스레드의 결과
- 자식 스레드가 실행되는 동안 GUI를 업데이트했습니다, 그냥 진행률 표시 줄입니다 (매 0.2 초)
- GUI를 업데이트 : 나는 재귀 함수를
- 자식 스레드 완료를 사용합니다 메인 스레드는 결과를 얻을 수
내 코드의 문제점은 Trovarete_Window가 나타나고 시작이다 작업자 기능이 이미 종료 된 경우에만 업데이트하십시오.. 그래서 내 프로그램은 노동자가 달릴 때까지 멈추거나 멈춘다.
def collega_GUI(widget, args=()):
builder.get_object('Trovarete_Window').show_all()
progressbar.set_pulse_step(0.20)
pulse()
t = threading.Thread(target=worker)
t.setDaemon(True)
t.start()
t.join()
print 'a'
def pulse():
if not event.is_set():
progressbar.pulse()
GObject.timeout_add(300, pulse)
def worker():
#hard work
어디에서 'collega_GUI'가 호출 되었습니까? 메인 루프는 어디에서 시작 했습니까? – dano
또한 메인 스레드가 완료 될 때까지 차단해야하는'worker'에서 필요한 것은 무엇입니까? 실제 프로그램이 실제로 작업 스레드에서 결과를 얻는 방법은 무엇입니까? – dano
1) collega_gui는 Gtk.Button에서 호출됩니다. 2) 하위 스레드가 끝에 도달하면 결과와 함께 변수를 설정합니다. 변수는 join() 다음에 호출되는 함수에 의해 리턴됩니다. – FrancescoN