C语言 主循环后的 GTK



我有一个问题,因为我在参考中找不到合适的解决方案来使 gtk_main() 之后发生某些事情。这是我对解决游戏的简单机器人的函数,但它不会运行,因为它甚至没有启动。如果我在机器人完成后放置 gtk_main(),我会得到一个已解决的游戏,所以它可以工作。gtk 中是否有一个函数可以让我在 gtk 主循环中随心所欲地操作?这是代码:

void RunBot(struct Packet *packet){
gtk_main();
while(LookForWin(packet)==0){
    packet->data->color_number=ColorPredictor(packet);
    CheckColors(packet);
    RefreshBoard(packet->essentials,board,colors,BoardButtons,Board);
    printf("Running..n");
}   }

提前致谢:)

正如 andlabs 和 mame98 指出的那样,GUI 工具包希望您的逻辑从执行少量工作的回调中执行,并迅速将控制权交给主循环。没有"主循环后工作",因为主循环的结束通常与应用程序的退出重合。

使用大型遗留代码库时,将现有代码重组为事件驱动样式可能非常困难。幸运的是,还有另一种选择。

您可以启动一个线程(使用 glib 以可移植的方式执行此操作)并在该线程中运行游戏逻辑,独立于 GUI 线程。在游戏线程中,使用 gdk_threads_add_idle() 偶尔通知您的 GUI 更改。这应该允许游戏代码和GUI思考各自运行节目。

所以在GTK中,你有事件,信号和超时。

所以如果你想每x毫秒调用一个函数,你应该使用

g_timeout_add (guint interval,
               GSourceFunc function,
               gpointer data);

只需查看官方文档即可了解有关此功能的更多详细信息。

gtk_main将一直运行到您调用gtk_main_quit();但您应该仅在应用程序结束时执行此操作。

最新更新