在外面结束循环体

需求背景

核心函数相当于一个while循环,不停的运行。现在有个需求,是在启动此功能后,能从外部停止其运行。
只奈学术不精,没能找到c++或c的原生实现;或者退而求其次存在某个设定固定内存地址,然后进行数据读写的方式;最后迫不得已,只能想到修改环境变量或者硬盘文件的方法。

修改环境变量

  • c++修改环境变量,使用getenv和setenv的方式。为此,还找了一篇不错的小博客。
  • 但是这种方式的实现结果相当于export的作用,不能跨终端设置。
  • 这个思路算浅尝辄止吧,没有深入研究。

使用读写硬盘文件的方法

  • 在循环体中,也不停的遍历此文件,如果文件内容被第二个函数修改过了,循环体就可以结束了。
    先来一个假代码
//a
#include 
#include 
//time:https://blog.csdn.net/chent86/article/details/76402708
#include 
#include 
int main()
{
    for(int i=0;i<50;i++){
        std::ifstream myfile("c.txt");
        sleep(1);
        if(myfile) break;
        printf("* \n")
    }

  return 0;
}
//b
#include 
#include 
int main()
{
    std::ofstream myfile("c.txt");
    myfile.close();
    return 0;
}

b会创建一个文件,a看到就会停止。

读取yaml文件

既然如此,干脆读取更多的文件信息,一不做二不休吧。然后瞄准了yaml文件作为媒介。正好opencv有读取此文件的接口。

  • 读取时出现的一个小bug:
  • what():  OpenCV(3.4.7) /home/user/package/opencv-3.4.7/modules/core/src/persistence_c.cpp:388: error: (-49:Unknown error code -49) Input file is empty in function 'cvOpenFileStorage'
    // 此bug是由于yaml书写不规范导致的,像我这儿的原因是yaml的头部应该加上:%YAML:1.0
    
  • 因为临时使用,参考内容还是来自博客。完整的yaml读取的姿势,满足了我的需求。还有另外一个作为补充,包括一些读取信息的写法。

你可能感兴趣的:(备忘)