월드를 시뮬레이트하고 초당 세계 상태를 여러 번 업데이트하는 프로그램 (C로 작성, 현재 Mac OS X 10.8.4에서 실행)이 있습니다.GTK + 3 멀티 스레딩
시작시이 프로그램은 간단한 GTK 창을 생성하고 gtk_main
을 호출하는 백그라운드 스레드를 만듭니다.
월드 상태가 (메인 스레드에서) 업데이트 될 때마다, 그 창에 변경 사항을 반영하고 싶습니다. 내 첫 번째 접근 방식은 세계가 업데이트 된 후 GTK 위젯을 간단히 업데이트하는 것이었지만, 다른 스레드에서 발생했기 때문에 상황이 엉망이되었습니다.
주 스레드가 그래픽 스레드의 일부 상태를 업데이트 한 다음 그래픽 스레드가 다시 그리기 할 것인지 묻는 이벤트를 대기열로 보낼 수있는 메커니즘이 있습니까? 나는.
void draw() {
// This can only be called from the graphics thread.
gtk_label_set(GTK_LABEL(label1), "some state");
}
// This causes draw() to be called on the graphics thread.
gtk_please_redraw_this_thing_on_the_graphics_thread();
어떤 방법이 있습니까? 또는 그것을 다루는 튜토리얼?
칼슘 [GCD] (http://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html) :'dispatch_async (dispatch_get_main_queue(), ...)를 사용하지 마십시오. '? –
가능한 한 휴대용으로 만들려고 노력 중이므로 Mac OS X 기능을 사용하지 않는 것이 좋습니다. – DanielGibbs