-1

我正在使用以下系统命令在我的 c 程序中调用 ffmpeg:

system("ffmpeg -t 10 -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -f mp4 /home/somepath/webcam.mp4");
system("ffmpeg -i /home/somepath/webcam.mp4 -r 1 -s 640x480 -f image2 foo-%03d.jpeg");

问题是我需要在第一个系统在 10 秒后完成后才调用第二个系统。我能想到的唯一方法是使用 thread.sleep() 然后调用它。还有其他更优雅的方法可以实现相同的目标吗?

4

4 回答 4

4

阅读一本好书,例如高级 linux 编程高级 unix 编程

您将了解到基本的进程创建和程序执行与fork(2)execve(2)waitpid(2)和相关的系统调用有关。

实际上,system(3)是由forkthenexecve的then a or实现/bin/sh的。-cwaitpidwait

你绝对可以自己forkexecve。您可能还想处理SIGCHLD信号。您不需要任何与线程相关的调用。您可能对pipe(2)dup2(2)poll(2)sigaction(2)pause(2)nanosleep(2)系统调用等感兴趣。

ffmpeg如果超过十秒,我不明白你想对你的第一个进程做什么。你想杀死(2)它吗?(然后先用 a 杀死SIGTERM,然后用 a杀死SIGQUIT,最后用 a杀死SIGKILL)。

如果您正在编写图形程序,大多数工具包都提供流程处理功能(因为它与事件循环混合在一起)。使用 GTK 考虑使用g_child_watch_addg_spawn_async。Qt 有一个QProcess类。

于 2012-07-28T07:11:12.733 回答
0

您可能可以在 bat 文件或 shell 脚本中编写所有命令并调用 bat 文件或 shell 脚本。

于 2012-07-28T07:07:09.097 回答
0

引自http://www.cplusplus.com/reference/clibrary/cstdlib/system/

int 系统 ( const char * 命令 );

执行系统命令

调用命令处理器来执行命令。一旦命令执行终止,处理器将控制权交还给程序,返回一个 int 值,其解释取决于系统。

我认为system是阻塞的。所以你不需要sleep

于 2012-07-28T07:11:45.127 回答
0

我认为 sleep 是一个很好的方法,不需要其他解决方案。

于 2012-07-28T07:14:54.697 回答