gpt4 book ai didi

c++ - popen pipe 减慢其他线程

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:45 25 4
gpt4 key购买 nike

我的多线程应用程序有问题。当一个线程执行同步 popen() 命令时,其他应用程序线程会显着变慢。 popen()线程执行ffmpeg,产生高负载。

正常情况下,其他线程执行时间为0.0007 ms。当使用 popen 时,一些线程将执行时间增加到 14-20 秒。

如何解决这个问题?

系统是FreeBSD 6.4

    FILE *pipe;
char buff[512];
if ( !(pipe = popen( command.c_str(), "r")) )
{ // if pipe is NULL
return false;
}

while ( fgets(buff, sizeof(buff), pipe) != NULL )
{
ptr_output->append(buff);
}

这里是 popen can 的新代码,没有帮助:Correct Code - Non-blocking pipe with popen

最佳答案

fgets 是阻塞读取,所以当上面的线程等待从管道读取数据时,其他线程被阻塞。在发出读取之前,您需要将 select/poll for 与文件描述符一起使用,以查看管道上是否有数据。这样,您就可以抢占该线程,让其他线程运行以执行有用的工作。

关于c++ - popen pipe 减慢其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com