LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1010|回复: 10

请教一个多进程中碰到的问题

[复制链接]
发表于 2005-8-25 10:05:55 | 显示全部楼层 |阅读模式
我现在在做一个视频显示的程序,程序的结构我考虑用多进程完成。

程序的设计思想是:开一个子进程。子进程的作用有点类似于服务器,自己做一些计算和统计,然后将计算得到的参数值用通过共享内存等方式发给主进程。主进程根据子进程发来的参数显示视频图像。

我现在碰到的问题是,视频图像显示起来是一闪一闪的,闪烁现象很严重。我想原因是在主进程显示,而因为多进程的关系,主进程经常会被子进程打断,造成闪烁的现象。因为我试过如果不开多进程,只是一个进程的话,闪烁现象会好很多。

我想请教以下各位,有没有什么好的方法可以解决这种闪烁的现象?
发表于 2005-8-25 11:18:18 | 显示全部楼层
怎么显示的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-25 12:13:31 | 显示全部楼层
是在LCD上显示,mmap()一个缓冲区,将数据一次写进去,就显示出来了。
回复 支持 反对

使用道具 举报

发表于 2005-8-25 12:43:21 | 显示全部楼层
那就是没有缓冲区了
难怪会闪烁
避免闪烁可以用双缓冲阿
回复 支持 反对

使用道具 举报

发表于 2005-8-25 14:12:09 | 显示全部楼层
回楼上回贴不看贴的,
他说:
因为我试过如果不开多进程,只是一个进程的话,闪烁现象会好很多。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-25 14:18:45 | 显示全部楼层
谢谢X11的回答!

再请教一下在这样的情况下如何用双缓冲解决闪烁的问题?因为在子进程中要进行大量的计算,里面不可能做LCD显示的操作。双缓冲的实现也是要在主进程中完成,仍然会面临被子进程打断的问题。
回复 支持 反对

使用道具 举报

发表于 2005-8-26 10:05:44 | 显示全部楼层
试试提高主进程的优先级。用nice函数。
回复 支持 反对

使用道具 举报

发表于 2005-8-26 10:20:16 | 显示全部楼层
双缓冲的关键是后台生成整个画面,一次刷新,这样就感觉不到局部更新导致的闪烁
主进程被子进程打断有什么关系,难道画面需要主进程不停的刷新么
在我的想象,主进程被打断后就后台生成新的画面,然后刷新一次,为什么会闪烁呢
我仍然认为导致闪烁的原因就是用mmap直接写屏,没有任何缓冲
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-26 11:34:18 | 显示全部楼层
to X11:
画面的确需要主进程不断刷新,因为是视频的东西,每秒差不多20帧。

to realtang:
考虑过提高主进程的优先级,但实际上反而子进程的优先级应该高一些,
因为子进程中是做数据计算的,需要尽量及时计算得到最新参数,对图像
进行更新。
回复 支持 反对

使用道具 举报

发表于 2005-8-26 12:06:58 | 显示全部楼层
可不可以在主进程更新屏幕的时候不允许子进程更新数据。或者在主进程更新屏幕之前把数据copy一份,然后按照copy的数据更新屏幕,这时候子进程更新的数据就和屏幕数据无关了。当然这时要设一个dirty标志,通知主进程数据已经更新,需要再次更新屏幕。
另外更新屏幕的时候最好不要先清屏在画,这样容易产生闪烁。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表