2011-11-16 3 views
4

나는 멋진 GUI를 표시하는 GTK +를 사용하는 응용 프로그램을 가지고,하지만 난 내 작은 RGB 프레임 버퍼를 표시 SDL을 사용하고 GTK + 내가 GTK +에 SDL을 얻기 위해 다음 코드를 사용했다임베딩 SDL GTK +

:

char SDL_windowhack[32]; 
sprintf(SDL_windowhack, "SDL_WINDOWID=%ld", GDK_WINDOW_XWINDOW(deviceWindow->window)); 
putenv(SDL_windowhack); 

불행히도 키보드와 마우스 이벤트에도 SDL을 사용합니다. SDL을 사용하여 이미지를 업데이트하는 주 스레드는 다음 스레드를 생성합니다.

void *SDLEvent(void *arg) 
{ 
    SDL_Event event; 

    while (1) { 
     fprintf(stderr, "Test\n"); 
     SDL_WaitEvent(&event); 
     switch (event.type) { 
      /* ... */ 
     } 
    } 
} 

인쇄 문이 두 번 실행 된 다음 아무 것도 표시되지 않습니다. SDL이 화면 (디스플레이)을 업데이트하는 데 사용하는 스레드를 종료하자마자 SDLEvent의 루프가 다시 매우 빠르게 실행되기 시작합니다.

SDL을 GTK +에 통합하기 전에이 코드를 사용했기 때문에 GTK +가 SDL을 몇 가지 방법으로 차단하고 있다고 생각합니까?

아무에게도 제안 사항이 있으십니까?

대단히 감사합니다!

답변

4

SDL을 사용하지는 않았지만 이벤트를 찾고있을 때 두 개의 이벤트 루프가 실행중인 것 같습니다. Gtk는 마우스 & 키보드와 같은 이벤트를 처리하는 자체 이벤트 루프를 실행합니다. 두 가지를 통합 할 방법을 찾아야한다고 생각합니다. 일부 인터넷 검색 결과는 다음과 같이 나타났습니다 link "Double event loop issue"섹션에서 문제가 해결되었습니다 (필자 생각). link에 제안 된대로 함수를 g_idle_add을 사용하여 유휴 함수로 추가하고 작동하는지 확인해보십시오.
희망이 도움이됩니다.

+0

감사합니다. 멋진 솔루션처럼 보입니다! 아직은 잘 작동하지 않지만 필자는 그걸로 바이올린을 할 것입니다. – Jary

+0

내가 준 링크에 "The SDL_WINDOWID hack"을 사용하고 있습니다. 방금 보았습니다. "이 솔루션에 대한 일반적인 SDL 이벤트를받지 못했습니다." 나는 불행하다고 생각한다 : ( – Jary

+0

@Jary : 흠 그 나쁜 .Gtk 이벤트 루프에서 키보드 및 마우스 이벤트를 사용할 수 없습니까? –