c - 主循环后的GTK

标签 c gtk gtk3

我有一个问题,因为我找不到正确的解决方案来引用以在 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 工具包期望您的逻辑从回调中执行,这些回调执行少量工作并快速放弃对主循环的控制。不存在“主循环之后的工作”,因为主循环的结束通常与应用程序的退出同时发生。

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

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

关于c - 主循环后的GTK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316455/

相关文章:

c - 虚拟鼠标和 eventX

c - GTK/GObject detailed_signal 参数

c - 在 C 中用 GtkTreeView 打印窗口?

callback - 将附加参数传递给 gtk 函数

css - 如何将 Gtk.InfoBar 的背景颜色更改为黄色?

c - "int"类型的参数与 "segment*"类型的参数不兼容 - 为什么它不接受该对象?

c - 识别预处理器中的内核空间?

iphone - ios - iPhone : How to create animation UItableviewcell when edit like native ios alarm clock app

rust - 如何在 gtk-rs 中监听剪贴板 "owner-change"事件?

c++ - Gtkmm,重载 'Scale()"的调用不明确