我有线程(工作得很好),在单一对象中调用方法,如下所示:
bool bInvokeUpdate= QMetaObject::invokeMethod(ApiManager::getInstance(),
"updateMainWindowTree",
Qt::BlockingQueuedConnection,
Q_RETURN_ARG(bool, bReturnUpdate))
我正在使用Qt :: BlockingQueuedConnection,所以我可以继续基于bool值的线程工作..任何方式 我的问题是剂量这个调用仍然在线程?或者它导致在主线程中执行方法?
当我调试应用程序时,我在调试器中看到我在线程ID xxxx中的线程 但是当我在updateMainWindowTree方法中设置断点时,我看到它跳转到mainthread。 那么我继续从主线程调用函数是什么意思?我怎么能避免它?
答案 0 :(得分:1)
由于您使用了Qt::BlockingQueuedConnection
,因此调用将在QObject
ApiManager::getInstance()
所属的主题中执行。
如果该单例属于与调用代码相同的线程,则会出现死锁。
您可以使用Qt::DirectConnection
保留在同一个线程中,但是您的函数名称表明它与GUI有关,因此它应该在主线程中执行(意味着您当前的代码及其行为可能已经正确了。)