ChunelFeng / CGraph

【A common used C++ DAG framework】 一个通用的、无三方依赖的、跨平台的、收录于awesome-cpp的、基于流图的并行计算框架。欢迎star & fork & 交流
http://www.chunel.cn
MIT License
1.77k stars 321 forks source link

相同程序的不同进程,执行node的run方法,关闭进程会导致其他进程终止 #408

Closed Czhazha closed 2 months ago

Czhazha commented 2 months ago

我在node的run里面执行了这一段测试代码

while(true)
{
    RKDecoder *Decoder = new RKDecoder();
    if ( !Decoder->Open("rtsp://admin:admin@192.168.1.169:554/mainstream") )
    {
        ;
    }
    while (true)
    {
        sleep(1);
    }
}

其中,Open是调用一个库,执行的是视频流拉流打开地址的操作。 然后这个进程A跑起来后,同样再启动一个进程B,一样的执行程序。 这时候ctrl+c停掉进程A,这时进程B也会被终止。 但是,顺序相反,则不会出问题,就是先杀掉进程B,这时A还正常运行。

我一开始怀疑解码操作的问题,另外写了demo,只保留解码操作且跟上述代码基本一样,同样顺序执行,都是各自独立终止和启动,这也是应该符合预期的。另外写的demo,也用std::thread单独起一个线程来执行,也是正常的。

在node的run里面,也只有这一句代码Open函数调用会导致这个问题,没有这一句也都正常如预期。

ChunelFeng commented 2 months ago

色图本身,并没有任何跨进程的内容。如果 遇到这种情况,建议考虑排查 Decoder->Open() 中的内容。

CGraph 在不同进程中,完全独立,没有任何联系。

Czhazha commented 2 months ago

了解,谢谢回复。