2013-08-21 3 views
2

Vala의 조이스틱에서 상태를 읽으려고합니다. 그러나 조이스틱에서 읽을 수는 있지만, 읽기 콜백은 GUI 그리기를 방해하는 것 같습니다.PollableSource 블록에서 읽기 GUI

valac --pkg gtk+-3.0 --pkg gio-2.0 --pkg gio-unix-2.0 --pkg posix example.vala -o example 

내 터미널에서 프로그램을 실행, 내가 할 모든 "의 톤이다

using Gtk; 

int main(string[] args) { 
    Gtk.init(ref args); 
    var window = new Window(); 
    var button = new Button.with_label("Click Me!"); 
    button.clicked.connect(() => { 
     stdout.printf("Click!\n"); 
    }); 
    window.add(button); 
    window.show_all(); 

    var fd = Posix.open("/dev/input/js0", Posix.O_RDONLY); 
    var stream = new UnixInputStream(fd, true); 
    var source = stream.create_source(); 
    source.set_callback((stream) => { 
     stdout.printf("Joystick button press!\n"); 
     return true; 
    }); 
    source.attach(null); 

    Gtk.main(); 

    return 0; 
} 

내가 그것을 컴파일 : 여기

이 문제를 보여 일부 샘플 코드 조이스틱 단추 누르기! " GUI 렌더링이 없습니다. 그것은 단지 빈 창입니다. 나는 소스 콜백을 attachs 라인 주석 때 :

source.attach(null); 

를 재 컴파일, 나는 그것을 클릭 할 때마다 반응하는 버튼으로 GUI를 얻을.

내 GUI와 동일한 루프에서 읽기 콜백을 수행하려면 어떻게해야합니까?

답변

2

귀하가 통보받은 데이터를 읽을 수 없기 때문에 내 생각에 그럴 수 있습니다. 이것은 pollable 소스이므로 폴링되므로 콜백은 계속 해고됩니다. 데이터를 검색하십시오. C 설명서는 이것을 위해 g_pollable_input_stream_read_nonblocking을 사용할 것을 권고합니다.

+0

지금은 의미가 있습니다. 개념 증명으로 stdout으로 인쇄하기 전에 –