我有一个使用 GTK+ 来显示一些漂亮的 GUI 的应用程序,但我使用 SDL 在 GTK+ 内显示一个小的 RGB 帧缓冲区
我使用以下代码将 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) {
/* ... */
}
}
}
我看到 print 语句执行了两次,然后没有执行。一旦我终止 SDL 用于更新屏幕(显示)的线程,SDLEvent 中的循环就会再次开始快速执行。
在我将 SDL 集成到 GTK+ 之前,这段代码曾经运行良好,所以我认为 GTK+ 可能在某些方面阻止了 SDL?
请问有人有什么建议吗?
非常感谢!
虽然我没有使用过 SDL,但是当您正在查找事件时,您似乎正在运行两个事件循环。 Gtk 运行它自己的事件循环来处理来自鼠标和键盘的事件。我认为你需要找到一种将两者结合起来的方法。一些谷歌搜索结果如下link在“双事件循环问题”部分中,您的问题已得到解决(我认为)。尝试添加SDLEvent
用作空闲函数,使用g_idle_add如建议的link看看它是否有效。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)