В моем основном процессе я создаю дочерний процесс ffmpeg, используя CreateProcess (...).
Мне нужно отслеживать статус преобразования прогресса, чтобы обновить индикатор выполнения. Для этого я читаю текст из вывода ffmpeg и извлекаю из него статус прогресса.
Я делаю пример программы:
HANDLE rPipe, wPipe;
CreatePipe(&rPipe,&wPipe,&secattr,0);
STARTUPINFO sInfo;
ZeroMemory(&sInfo,sizeof(sInfo));
PROCESS_INFORMATION pInfo;
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESTDHANDLES;
sInfo.hStdInput=NULL;
sInfo.hStdOutput=wPipe;
sInfo.hStdError=wPipe;
// pStr contain ffmpeg command
CreateProcess(0,(LPTSTR)pStr,0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
CloseHandle(wPipe);
BOOL ok;
do
{
memset(buf,0,bufsize);
ok=::ReadFile(rPipe,buf,100,&reDword,0);
result += buf;
}while(ok);
Но я не смог получить "результат" в интерактивном режиме. Мое приложение удерживается во время преобразования, и «результат» строки обновляется только после завершения процесса ffmpeg.
Как я могу одновременно запускать мой основной процесс и ffmpeg, а также интерактивно считывать / записывать в вывод / ввод процесса ffmpeg?
Спасибо за ваше время!
LRS