【发布时间】:2011-04-03 03:42:35
【问题描述】:
我知道,有一些与以下类似的问题,但我找不到对我有帮助的具体答案。所以这是我的问题:
我正在开发一个在启动时执行一些 gui 初始化的应用程序。我必须做的一件事就是打电话
NetworkConfigurationManager::updateConfigurations ()
这是一个异步调用,完成后会发出updateCompleted() 信号。问题是,我所有其他的 gui 初始化都必须等到 updateConfigurations() 完成。
所以我能做的就是这样:
MyApp::MyApp(QWidget *parent) : ....
{
doSomeInits();
//Now connect the signal we have to wait for
connect(configManager, SIGNAL(updateCompleted()), this, SLOT(networkConfigurationUpdated()));
configManager->updateConfigurations(); //call the async function
}
void MyApp::networkConfigurationUpdated()
{
doSomething();
doRemainingInitsThatHadToWaitForConfigMgr();
}
拆分初始化对我来说似乎不是一个好方法。我认为它使代码更难阅读 - 初始化应该保持在一起。另一件事是:因为updateConfiguration() 是异步的,用户将能够使用GUI,它还没有给他任何信息,因为我们正在等待updateCompleted()。
那么有没有办法在应用程序继续之前等待updateCompleted() 信号?
喜欢:
MyApp::MyApp(QWidget *parent) : ....
{
doSomeInits();
//Now connect the signal we have to wait for
connect(configManager, SIGNAL(updateCompleted()), this, SLOT(doSomething()));
???? //wait until doSomething() is done.
doRemainingInitsThatHadToWaitForConfigMgr();
}
在某些 API 中,有异步函数的阻塞替代方案,但在这种情况下没有。
感谢您的帮助。谢谢!
【问题讨论】: