我是GTK3的新手。 我正在尝试设计一个多人游戏。我在定义的主窗口上有一个用于启动新游戏的按钮,
Gtk::Button new_game;
并且链接到其on_clicked函数:
new_game.signal_clicked().connect(sigc::mem_fun(*this, &Window::onNewGameClicked));
该函数执行以下操作:
void Window::onNewGameClicked(){
startGame();
}
startGame()一直运行到游戏结束。 现在,一旦按下,new_game按钮将保持按下状态,而我无法单击窗口上的任何其他按钮。 在按下new_game按钮并开始游戏后,我需要将其释放。 我确实知道未释放按钮的原因是因为它的功能正在运行。但是我真的希望有某种方式可以手动释放按钮,因为在游戏进行过程中,用户应该可以再次按下按钮。
谢谢。
答案 0 :(得分:2)
GTK +是事件驱动的工具箱。它对事件做出反应,有时让您对那些事件做出反应(当您连接到信号时)。当您只有一个线程时,程序的所有部分(包括其依赖项,例如GTK +)都将共享CPU时间。
有2名工人试图用一把铲子挖洞。 GTK +可以铲和挖。如果您连接了信号,GTK +将呼叫您的回调,并为您提供电铲,以便您可以进行工作。问题在于您永远不会退出回调,因此永远也不会将铲子交还给GTK +,因此整个用户界面都将被冻结。
startGame
不能用作阻止功能。您需要按照有意义的步骤来划分游戏,并且在调用您的回调之一时,请意识到您必须尽快从中退出。