2011-11-16 55 views
4

我有一个使用GTK +显示一些漂亮的GUI的应用程序,但我使用SDL来显示内部的小RGB帧缓冲器GTK +嵌入SDL成GTK +

我已经使用以下代码来获得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其中在“双事件循环问题”部分已解决您的问题(我认为)。如link中建议的那样,尝试使用g_idle_addSDLEvent函数作为闲置函数添加并查看它是否有效。
希望这有助于!

+0

谢谢,这看起来像一个很棒的解决方案!它还没有工作,但我会捣鼓它,非常感谢! – Jary

+0

我在你给我的链接上使用了“SDL_WINDOWID hack”。我刚刚看到:“您没有收到这个解决方案通常的SDL事件。”我猜我是不吉利:( – Jary

+0

@Jary:嗯,那很糟糕,你不能使用Gtk事件循环中的键盘和鼠标事件吗? –