gpt4 book ai didi

qt - QStatemachine 和并行状态

转载 作者:行者123 更新时间:2023-12-04 13:31:20 26 4
gpt4 key购买 nike

我对带有 ParallelState 的 QStateMachine 很着迷。
我有一个包含第一个状态的主状态(顺序),
包含一组并行状态的第二个状态,以及另一个连续的状态。
第一个状态代表创建 N 个输入文件的进程,第二个状态代表 N 个线程
处理每个输入(一个文件的一个线程),最后一个状态代表一个生成报告的进程
整个过程(需要等待第二个状态完全完成)。
好吧,问题就在于我需要在第二个状态和第三个状态之间创建一个障碍。我需要一些障碍
完成所有线程,但我无法做到。根据文档,据说复合 Material
并行的状态,当它的所有 child 都进入最终状态时调用完成。首先
在这种情况下,进入最终状态是什么意思?我是否需要为并行状态中的每个状态创建一个最终状态?
无论如何,我尝试了这个,但什么也没有。结果是当第一个线程完成时,我的容器的最终状态被调用。

这是一个片段:

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::connect 与每个完成的信号
pState,但它没有被调用。

谢谢你,
最好的事物

最佳答案

Qt 文档指出:

For parallel state groups, the QState::finished() signal is emitted when all the child states have entered final states.



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

关于qt - QStatemachine 和并行状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3568994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com