Skip to content

关于暂停的疑问 #573

@sandrew0916

Description

@sandrew0916

在run之前会判断节点的状态是否是NORMAL,run结束后会在checkSuspend接口中判断是否为SUSPEND;
如果当前的pipeline为A->B->C;在B执行完了之后,checkSuspend接口已经通过了,C执行之前调用了suspend接口,那就相当于针对C节点这个for循环不会进来,直接break了吗?那后续节点会如何运行?这是否符合预期?

fatProcessor接口中:
for (CSize i = 0; i < this->loop_ && status.isOK() && GElementState::NORMAL == this->getCurState(); i++) { /** 执行带切面的run方法 */ status += doAspect(internal::GAspectType::BEGIN_RUN); CGRAPH_FUNCTION_CHECK_STATUS auto name = this->getName(); CGRAPH_ECHO("prepare run node: %s", this->getName().c_str()); do { CGRAPH_ECHO("start run node: %s", this->getName().c_str()); status += isAsync() ? asyncRun() : run(); /** * 在实际run结束之后,首先需要判断一下是否进入suspend状态了。 * 接下来,如果状态是ok的,并且被条件hold住,则循环执行 * 默认所有element的isHold条件均为false,即不hold,即执行一次 * 可以根据需求,对任意element类型,添加特定的isHold条件 * */ CGRAPH_ECHO("finish run node: %s", this->getName().c_str()); } while (checkSuspend(), this->isHold() && status.isOK()); doAspect(internal::GAspectType::FINISH_RUN, status); }

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions