如何释放 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 退出它。
我是 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 退出它。