【发布时间】:2015-09-28 16:54:39
【问题描述】:
我有一个通过 myfuntion 点击连接的按钮,见下文。
我正在使用 QEventLoop,因为我正在等待一个事件,它将调用 _myEventLoop.exit(0);
当我连续两次单击按钮而不等待事件发生时,我收到错误消息:
QEventLoop::exec: instance 0x22f47378 has already called exec()
我在调用 exec() 之前调用了 exit(1),但似乎这个 exit 立即返回,然后函数通过 exec(),因为它仍在运行 return 1,myfunction 返回并且只有第一个exec() 返回 1。
在继续之前,我如何确定之前对 exec() 的调用已经返回?
void myfuntion()
{
_myEventLoop.exit(1);
if(_myEventLoop.exec() == 0)
{
// DoSomething
}
}
【问题讨论】:
-
这里的目标到底是什么?我不明白一遍又一遍地重新启动本地事件循环有什么意义。
-
我的目标是在某个事件之前阻止该函数的用户。如果该函数被其他人调用以释放第一个用户并阻止最后一个调用者。根据我对 eventLoop 工作原理的理解,我不能,我完全改变了概念。
-
@Giacogiac 你能详细说明你的方法吗?
-
@RDP 我没能阻止执行。所以我使用回调。我想写:
void MyClass::onClick() { if(_myEventManager->pick()) // blocking { // DoSomething } }我在做什么:void MyClass::onClick() { _myEventManager->cancelPick(); // calls previous callback with success == false _myEventManager->requestPick(this, &MyClass::onPick); } void MyClass::onPick(bool success) { if(success) { // DoSomething } }
标签: c++ qt qt5.5 qeventloop