首页 新闻 会员 周边

c# 线程内死循环 无休眠 CPU占用高

0
悬赏园豆:5 [已关闭问题] 关闭于 2013-02-01 10:04

前景

 c# 屏幕录像  开启了一个线程 线程内死循环 不停的截图放入待处理的队列  在另外一个线程内把队列里的图像压缩为 avi视频     

   截图的线程是死循环 没有任何休眠 这会导致CPU占用瞬间飙升  又不能在死循环里加休眠  加休眠会导致录制出来的图像不流畅 特别是屏幕有视频播放 或者 JS渐变的时候 最明显

 

问题

 有没有什么方法 可以不在 线程的 死循环体内 加休眠 而CPU 占用也不会那么高的办法??    现在是2个线程 CPU占用就高达50-70%  (我电脑是 AMD 双核)

不语的主页 不语 | 初学一级 | 园豆:126
提问于:2013-01-21 16:48
< >
分享
所有回答(5)
0

视频一般来说每秒24帧就够了吧,是不是可以认为每40毫秒截一次屏就够了呢

I,Robot | 园豆:9783 (大侠五级) | 2013-01-21 22:51

如果屏幕刷新慢的时候 是足够了  但屏幕上在播放一段视频 录制出来以后 那视频就是 卡卡停停的  或者JS的渐变特效 也是 

支持(0) 反对(0) 不语 | 园豆:126 (初学一级) | 2013-01-22 11:11

@浣花溪: 如果能确保40毫秒截一次屏,那就算电脑在播放视频截下来的应该也还算流畅吧,现在的视频不都差不多是24帧的吗

支持(0) 反对(0) I,Robot | 园豆:9783 (大侠五级) | 2013-01-22 17:06
0

HI,同意楼上的观点。只要找到那个人眼感知的界限就可以了,对于人来说500毫秒内的速度变化是没有明显感觉的,但对于电脑来说已经做了极多的操作了。

月窟仙人 | 园豆:383 (菜鸟二级) | 2013-01-21 23:24
0

网上有一些屏幕录像的例子的  可以看看别人怎么实现的

gunsmoke | 园豆:3592 (老鸟四级) | 2013-01-22 06:12
0

System.Threading.Thread.Sleep(500);延迟

lock 和死循环有点差别

深圳_猫仔 | 园豆:16 (初学一级) | 2013-01-22 10:32
0

求解释,为何不能有休眠。难道我们看到的电影真的是连续的?生物学上也没说过需要连续的吧。每秒15帧,人的肉眼能识别出不来的吧,具体数字多少我记不清了。如果你休眠真的导致不流畅的话,那么我只能说你的代码写的存在问题。要不,把你截图的代码与压缩的代码晾出来晒晒

BLoodMaster | 园豆:135 (初学一级) | 2013-01-23 01:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册