首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

【请问】多线程Synchronize有关问题

2012-12-29 
【请教】多线程Synchronize问题一个多线程程序,其中一个是视频显示和图像采集线程(代码几乎不能修改), 还有

【请教】多线程Synchronize问题
一个多线程程序,其中一个是视频显示和图像采集线程(代码几乎不能修改), 还有一个是图像识别线程,这个图像识别线程中,用了Canvas...等

问题出来了:
(1) 如果图像识别线程 不用Synchronize,则可以正常工作,但内存释放有问题(已经严格检查一个new 对应一个delete)。当软件跑一天一夜的时候,内存达到2G左右,程序会死机。
(2) 如果图像识别线程,用Synchronize ,在不启动视频的情况下测试,内存不泄露,能够完成离线图像识别。但启动视频后,一旦开始图像识别,视频就会卡住不动,软件无法运行。

请问大侠,该怎么搞啊,折腾好几天没有进展中。。。。。。
[解决办法]
不管同步与否,各个线程之间都要相互配合,如果一个线程的代码不能动,单靠另外一个线程去适应,有的时候很难办,不行就试一下内存池,启动的时候分配足够的内存空间,然后运行时循环使用,到程序结束时再释放,避免内存频繁分配、释放产生的问题
[解决办法]
这种情况很可能是你视频用了Canvas,这样识别和视频串行化了,也就是识别的时候不能视频,视频的时候不能识别。
所以就用第一种方法将就用,不能将就,就避免Canvas的创建和释放。
另外就是把视频拷贝到另一个文件,识别的时候只操作另一个文件。避免资源同步互斥。
[解决办法]
识别线程可能使用了视频采集相关的函数或API,通过Synchronize造成串行化。与Canvas或许并无关系。


[解决办法]
解决问题1吧:
很可能是内存碎片导致的问题。所以没有泄露照样挂。
使用自己的内存池,或者避免在线程里面new和delete。

热点排行