首页 > 解决方案 > NodeRed 中的 execNode 不执行 while 1 语句

问题描述

我正在运行一个 exec 节点来运行 C 代码以通过 Lora 发送和接收数据。

代码在没有 while 1 循环的情况下完美运行。

如果我放置一个 while true 循环,它将继续运行但不会工作。while 1 用于每秒读取数据。

我尝试使用 daemon exec 节点也 bigExec 但没有奏效。

标签: node-red

解决方案


如果进程永远不会退出(这就是我假设你的意思是有一个 while 1 循环),那么守护程序节点就是正确的答案。

只要您的应用程序将其输出打印到 stdout 或 stderr 并在每个输出的末尾包含一个新行,它就会为每一行输出发送一条新消息。您可能需要确保正确刷新标准输出,您可以通过fflush(stdout);在 printfs 之后添加来做到这一点,例如

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv) {
    int i = 0;
    int max = 0;

    if (argc == 2) {
        max = atoi(argv[1]);
    }

    while (1) {
        if (max) {
            if (++i > max) {
                exit(0);
            }
        }
        printf("helloWorld\n");
        fflush(stdout);
        sleep(2);
    }

}

exec 节点将等到进程退出后再发送消息,因此这不是您需要的。


推荐阅读