如何释放Gtk::按钮?

如何释放Gtk::按钮?,gtk,gtk3,gtkmm,Gtk,Gtk3,Gtkmm,我是GTK3的新手。 我想设计一款多人游戏。我在主窗口上有一个按钮,用于启动新游戏,定义如下: Gtk::Button new_game; 并且它链接到它的点击功能: new_game.signal_clicked().connect(sigc::mem_fun(*this, &Window::onNewGameClicked)); 该函数执行以下操作: void Window::onNewGameClicked(){ startGame(); } startName()一

我是GTK3的新手。 我想设计一款多人游戏。我在主窗口上有一个按钮,用于启动新游戏,定义如下:

Gtk::Button new_game;
并且它链接到它的点击功能:

  new_game.signal_clicked().connect(sigc::mem_fun(*this, &Window::onNewGameClicked));
该函数执行以下操作:

void Window::onNewGameClicked(){
  startGame();
}
startName()一直运行到游戏结束。 现在,一旦按下按钮,“新游戏”按钮仍处于按下状态,我无法单击窗口上的任何其他按钮。 我需要新的_游戏按钮被释放后,它被按下,游戏开始。 我明白按钮没有释放的原因是因为它的功能正在运行。但我真的希望有某种方法可以手动释放按钮,因为用户应该能够在游戏运行时再次按下按钮


谢谢。

GTK+是一个事件驱动工具包。它会对事件做出反应,有时会让您对这些事件做出反应(当您连接到信号时)。由于只有一个线程,程序的所有部分,包括它的依赖项(如GTK+)都共享CPU时间

想象一下,两名工人试图只用一把铲子挖洞。GTK+有铲子,可以挖掘。如果您连接到一个信号,GTK+将呼叫您的回拨,并给您电铲,以便您可以完成您的工作。问题是,您从未退出回调,因此您从未将铲子返回给GTK+,因此整个用户界面都被冻结


startGame
不能是阻止函数。你需要将游戏分成合理的步骤,当调用回调函数时,要意识到你必须尽快从中返回。

GTK+是一个事件驱动的工具包。它会对事件做出反应,有时会让您对这些事件做出反应(当您连接到信号时)。由于只有一个线程,程序的所有部分,包括它的依赖项(如GTK+)都共享CPU时间

想象一下,两名工人试图只用一把铲子挖洞。GTK+有铲子,可以挖掘。如果您连接到一个信号,GTK+将呼叫您的回拨,并给您电铲,以便您可以完成您的工作。问题是,您从未退出回调,因此您从未将铲子返回给GTK+,因此整个用户界面都被冻结

startGame
不能是阻止函数。你需要把游戏分成合理的步骤,当你的一个回调被调用时,意识到你必须尽快从中返回