如何释放 Gtk::Button?

How do I release a Gtk::Button?

我是 GTK3 的新手。 我正在尝试设计一款多人游戏。我的主 window 上有一个开始新游戏的按钮,定义如下:

Gtk::Button new_game;

它链接到它的 on_clicked 函数:

  new_game.signal_clicked().connect(sigc::mem_fun(*this, &Window::onNewGameClicked));

函数执行以下操作:

void Window::onNewGameClicked(){
  startGame();
}

startGame() 保持 运行 直到游戏结束。 现在,一旦按下,new_game 按钮就会保持按下状态,我无法单击 window 上的任何其他按钮。 我需要在按下 new_game 按钮后释放它并开始游戏。 我明白按钮没有被释放的原因是因为它里面的函数是运行。但我真的希望有一些方法可以手动释放按钮,因为用户应该能够在游戏运行时再次按下它。

谢谢。

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

想想 2 名工人试图用一把铲子挖洞。 GTK+ 有铲子,可以挖。如果你连接到一个信号,GTK+ 将调用你的回调,并给你一把铲子,这样你就可以做你的工作了。问题是你永远不会退出回调,所以你永远不会把铲子还给 GTK+,所以整个用户界面都被冻结了。

startGame 不能是阻塞函数。您需要按照合理的步骤拆分游戏,并且在调用其中一个回调时,意识到您必须尽快 return 退出它。