Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中的特定时间执行操作_C_Linux - Fatal编程技术网

在C中的特定时间执行操作

在C中的特定时间执行操作,c,linux,C,Linux,我有一个while循环,它通过检索每一帧来解码视频文件,所以类似这样: while (get_frame(codec_ctx, format_ctx, video_stream, frame) != 0) { ... } 现在,一旦检索到一个帧,它需要在将来的某个时间点(根据帧的时间戳)绘制到屏幕上。如何实现这一点?有什么方法可以设置在特定时间执行回调吗?使用select(2)等待,直到您需要绘制帧(或者直到您需要执行其他操作,由传递给select()的一个FD所指示)。您可以将

我有一个while循环,它通过检索每一帧来解码视频文件,所以类似这样:

while (get_frame(codec_ctx, format_ctx, video_stream, frame) != 0) {
      ...
 }
现在,一旦检索到一个帧,它需要在将来的某个时间点(根据帧的时间戳)绘制到屏幕上。如何实现这一点?有什么方法可以设置在特定时间执行回调吗?

使用
select(2)
等待,直到您需要绘制帧(或者直到您需要执行其他操作,由传递给
select()
的一个FD所指示)。

您可以将(帧、时间)对推送到队列上,然后让一个单独的线程执行以下算法:

loop {
    time, frame = pop(queue);
    wait_until(time);
    display(frame);
}

其中,
pop
等待一个项目被推到队列上,如果它是空的。

我建议使用
poll
,我觉得这比
select
更现代