NodeRed 中的 execNode 不执行 while 1 语句
execNode in NodeRed doesn't execute a while 1 statement
我正在 运行将执行节点连接到 运行 C 代码以通过 Lora 发送和接收数据。
代码 运行 完全没有 while 1 循环。
如果我放置 while true 循环,它会保持 运行ning 但不会工作。
while 1用于每秒读取数据。
我尝试使用 daemon exec node 也使用 bigExec,但 none 有效。
如果进程永远不会退出(我假设您的意思是有一个 while 1 循环),那么守护进程节点是正确的答案。
只要您的应用程序将其输出打印到 stdout 或 stderr 并在每个输出的末尾包含一个新行,它就会为每行输出发送一条新消息。您可能需要确保正确刷新标准输出,您可以通过在 printfs 之后添加 fflush(stdout);
来做到这一点,例如
#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 节点会等到进程退出后再发送消息,所以这不是您所需要的。
我正在 运行将执行节点连接到 运行 C 代码以通过 Lora 发送和接收数据。
代码 运行 完全没有 while 1 循环。
如果我放置 while true 循环,它会保持 运行ning 但不会工作。 while 1用于每秒读取数据。
我尝试使用 daemon exec node 也使用 bigExec,但 none 有效。
如果进程永远不会退出(我假设您的意思是有一个 while 1 循环),那么守护进程节点是正确的答案。
只要您的应用程序将其输出打印到 stdout 或 stderr 并在每个输出的末尾包含一个新行,它就会为每行输出发送一条新消息。您可能需要确保正确刷新标准输出,您可以通过在 printfs 之后添加 fflush(stdout);
来做到这一点,例如
#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 节点会等到进程退出后再发送消息,所以这不是您所需要的。