我有我的多線程應用程序的問題。當一個線程執行同步popen()
命令時 - 其他應用程序線程顯着減慢。用popen()
執行ffmpeg
,產生高負載。POPEN管減慢其他線程
通常情況下,其它線程執行時間爲0.0007毫秒。當使用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的新代碼可以在沒有幫助:Correct Code - Non-blocking pipe with popen
哇,謝謝,你確定由'fgets'阻塞讀所有線程都在等待,不僅是調用'fgets'的線程?這個「管道」代碼只用於一個線程......你可以添加一些代碼示例如何解決這個問題? – abrahab
這個問題看起來是你正在尋求解決的確切問題:http://stackoverflow.com/q/149860/282531。 – Specksynder
爲什麼fgets()會阻止當前線程以外的線程?這確實是一個阻塞呼叫,但只適用於當前線程,對嗎? – Brady