C ++同步阶段多线程管道

时间:2014-07-16 20:45:41

标签: c++ multithreading video pipeline

很抱歉,如果有人问过,我会在询问之前尽力搜索重复...

我正在实现一个应该实时运行的视频处理应用程序。它所做的处理可以很容易地分成4个阶段,每个阶段对前一阶段产生的中间值进行操作。处理比1/30秒处理的处理更重,但是如果我可以将这个应用程序分成4个线程并将其转换为管道,那么每个阶段都需要的时间少于整个阶段,整个事情将实时运行( 4帧滞后,完全可以接受。)

我对多线程编程比较陌生,我遇到的问题是,我无法在每帧开始时找到启动/停止每个线程的机制,所以它们都是一起进行,每个周期提供一个完成的框架"周期"在末尾。我发现的所有框架/库似乎都担心使用队列和工作线程进行负载平衡,但这不是我在这里需要的。假设我可以让它们同步,就会有四个线程。

有人能指出我使用C ++的起点吗?

感谢。

1 个答案:

答案 0 :(得分:0)

假设4帧滞后是可以接受的,您可以使用列表节点池,每个节点都有一个指向帧缓冲区的指针和一个指向中间值的指针(NULL指针可用于指示流的结束)。每个线程都将自己的列表作为多线程消息传递系统的一部分。第一个线程将从空闲池中获取一个帧节点,执行它的处理并将节点发送到下一个线程列表,依此类推,最后一个线程将节点返回到空闲池。

这是一个示例文件复制程序的链接,该程序生成一个线程来执行写操作。它在消息传递功能中使用Windows线程,互斥锁和信号量,但消息传递功能很简单,可以在内部更改以使用通用等效项而无需更改其接口。 main()函数可以更改为使用通用线程和设置互斥锁和信号量或类似的东西。

mtcopy.zip