首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QStatemachine与并行态

QStatemachine与并行态
EN

Stack Overflow用户
提问于 2010-08-25 18:19:08
回答 1查看 2.7K关注 0票数 4

我和QStateMachine和ParallelState都快疯了。我有一个主状态(顺序),它包含第一状态,第二状态包含一组并行状态,另一状态又是顺序的。第一状态表示创建N个输入文件的进程,第二状态表示对每个输入工作的N个线程(一个文件的一个线程),最后一个状态表示生成整个进程的报告的进程(需要等待第二状态完全完成)。问题就在我需要在第二种状态和第三种状态之间设置一个屏障时。我需要一些屏障来完成所有的线程,但我无法做到。在文档之后,据说是并行的复合状态,当它的所有子节点进入最后状态时调用完成。首先,在这种情况下,进入最终状态意味着什么?我是否需要为并行状态中的每个状态创建一个最终状态?不管怎样,我试过了,但什么也没有。结果是,当第一个线程完成时,调用我的容器的最后状态。

这是一个片段:

代码语言:javascript
复制
QState *mainState = new QState(QState::ExclusiveStates);

// Create the first state associated to the first process
QState *firstState = new QState(mainState);
QObject::connect(firstState, SIGNAL(entered()), this, SLOT(executeFirstProcess()));

// parallel container state
QState *parallelContainerState = new QState(QState::ParallelStates, mainState);
firstState->addTransition(this, SIGNAL(goToNextStep()), parallelContainerState);

QFinalState *parallelFinalState = new QFinalState(parallelContainerState);

int parallelStepCounter = 0;
for(;parallelStepCounter < 5; parallelStepCounter++) {
    QState *pState = new QState(parallelContainerState);
    QObject::connect(pState, SIGNAL(entered()), this, SLOT(executePState()));
    pState->addTransition(pState, SIGNAL(finished()), parallelFinalState);
}

QState *reportState = new QState(mainState);
QObject::connect(reportState, SIGNAL(entered()), this, SLOT(generateReport()));
parallelContainerState->addTransition(parallelContainerState, SIGNAL(finished()), reportState);

... set initial state, start machine bla bla...

怎么能等到第二状态已经完全结束了呢?我还尝试使用QObject::连接每个pState的已完成信号,但它不会被调用。

谢谢你,最好

EN

回答 1

Stack Overflow用户

发布于 2010-08-26 15:36:47

Qt文档指出:

对于并行状态组,当所有子状态都进入了最终状态时,就会发出QState::

()信号。

这使我相信,与其让QFinalState连接到parallelContainerState,不如将所有子状态连接到自己的最终状态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3568994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档