我有一个问题,因为我无法找到适当的解决方案,因为在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");
} }
提前致谢:)
答案 0 :(得分:1)
正如andlabs和mame98指出的那样,GUI工具包期望你的逻辑从执行少量工作的回调执行,并迅速放弃对主循环的控制。主循环"之后没有"工作,因为主循环的结束通常与应用程序的退出重合。
使用大型遗留代码库时,将现有代码重构为事件驱动的样式可能非常困难。幸运的是,还有另一种选择。
您可以启动一个线程(using glib以便移植)并在该线程中运行您的游戏逻辑,与GUI线程分开。在游戏线程中,使用gdk_threads_add_idle()
偶尔会向GUI通知更改。这应该允许游戏代码和GUI思维都运行节目。
答案 1 :(得分:0)
所以在GTK中你有事件,信号和超时。
因此,如果你想每x毫秒调用一个函数,你应该使用
g_timeout_add (guint interval,
GSourceFunc function,
gpointer data);
请查看official documentation以了解有关此功能的更多详情。
gtk_main
将一直运行,直到您致电gtk_main_quit();
,但您应该只在申请结束时执行此操作。