Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Qt多线程:在QCoreApplication::sendEvent中断言失败:从线程(QRunnable)向主线程发送信号时_Multithreading_Qt_Qthread - Fatal编程技术网

Multithreading Qt多线程:在QCoreApplication::sendEvent中断言失败:从线程(QRunnable)向主线程发送信号时

Multithreading Qt多线程:在QCoreApplication::sendEvent中断言失败:从线程(QRunnable)向主线程发送信号时,multithreading,qt,qthread,Multithreading,Qt,Qthread,我不熟悉多线程。似乎很多人都有类似的问题。我寻找了很多答案。但是,我无法理解为什么在我的案例中会出现以下错误: QCoreApplication::sendEvent中的断言失败:“无法将事件发送到其他线程拥有的对象。当前线程26ff4538。接收器“”(类型为“RuleSetVerifier”)是在线程90b6c0中创建的,文件kernel\QCoreApplication.cpp,第553行 从主线程开始创建一个不可命名的线程: ConditionAnalysisManager* analy

我不熟悉多线程。似乎很多人都有类似的问题。我寻找了很多答案。但是,我无法理解为什么在我的案例中会出现以下错误:

QCoreApplication::sendEvent中的断言失败:“无法将事件发送到其他线程拥有的对象。当前线程26ff4538。接收器“”(类型为“RuleSetVerifier”)是在线程90b6c0中创建的,文件kernel\QCoreApplication.cpp,第553行

从主线程开始创建一个不可命名的线程:

ConditionAnalysisManager* analysisManager = new ConditionAnalysisManager(param1, param2);
    connect(analysisManager, SIGNAL(conditionAnalysisResultReady(const QString&, int, bool, QMap<QString, bool>, const QString&)), this, SLOT(evaluateAnalysisResult(const QString&, int, bool, QMap<QString, bool>, const QString&))); 
    QThreadPool::globalInstance()->start(analysisManager);
发出信号时会发出警报。我尝试按照中的描述实现它

据我所知,可以从线程调用主线程中的插槽。我尝试使用Qt::QueuedConnection和默认设置。我总是得到警告。为什么?我的情况怎么了

在继承QRunnable的ConditionAnalysisManager类的构造函数中,我创建了一个助手类的对象,该类不继承QRunnable

this->m_ruleSetVerifier = new RuleSetVerifier(param1, param2);
我之所以提到这一点,是因为警报显示“当前线程26ff4538.Receiver”“(类型为“RuleSetVerifier”)。我无法理解为什么线程是RuleSetVerifier类型而不是ConditionAnaylsisManager类型,因为信号是从ConditionAnalysisManager发出的。怎么了


我期待着你的帮助。谢谢大家!

您如何使用这个
RuleSetVerifier
对象?我调用这个类中的方法并返回结果。RuleSetVerifier中没有信号/插槽。缺少的代码太多,无法找到问题的根源。您似乎试图从错误的线程对
RuleSetVerifier
对象执行某些操作。您应该知道它存在于主线程中,而您在
ConditionAnalysisManager::run
中所做的一切都在新线程上执行。谢谢!当我在ConditionAnalysisManager线程中创建RuleSetVerifier对象时,为什么它在主线程中?它应该在ConditionAnalysisManager线程中。我怎样才能到达那里?我应该执行moveToThread吗?因为它是在构造函数中创建的。在新线程中运行的唯一部分是
run
方法中发生的事情。因此,您必须在
run
方法中创建它,并确保只在新线程中使用它。或者你可以使用设计。你如何使用这个
RuleSetVerifier
对象?我调用这个类中的方法并返回结果。RuleSetVerifier中没有信号/插槽。缺少的代码太多,无法找到问题的根源。您似乎试图从错误的线程对
RuleSetVerifier
对象执行某些操作。您应该知道它存在于主线程中,而您在
ConditionAnalysisManager::run
中所做的一切都在新线程上执行。谢谢!当我在ConditionAnalysisManager线程中创建RuleSetVerifier对象时,为什么它在主线程中?它应该在ConditionAnalysisManager线程中。我怎样才能到达那里?我应该执行moveToThread吗?因为它是在构造函数中创建的。在新线程中运行的唯一部分是
run
方法中发生的事情。因此,您必须在
run
方法中创建它,并确保只在新线程中使用它。或者你可以使用这个设计。
this->m_ruleSetVerifier = new RuleSetVerifier(param1, param2);