码迷,mamicode.com
首页 > 编程语言 > 详细

VS C++ 并发编程

时间:2017-06-19 23:31:03      阅读:423      评论:0      收藏:0      [点我收藏+]

标签:执行   read   子线程   derived   错误   开始   并发   技术   style   

1.VS2012及以上版本,支持C++11 thread类的并发编程。

相关材料可以参考博客:http://www.cnblogs.com/rangozhang/p/4468754.html

2.但对其之前的版本,可采用以下方式,实现类成员函数创建子线程实现并发。

  首先需实现线程类的run函数,故定义了线程类的头文件和其对应的函数实现,具体如图1,2所示:

技术分享

图1 线程类的头文件

技术分享

图2 线程类的实现文件

  注意到继承的DerivedThread类,只需将并发执行的函数写在其对应的run()函数内即可。

  其中需要注意的是:子线程运行结束的条件。下面以一个项目为例,进一步说明其重要性。

  上述截图中,类成员TempGrayImg是已知的输入图像,TempOptMMStir是未知的目标掩码图像,之前错误的做法是:以目标掩码图像TempOptMMStir非零像素点的个数是否为零作为当前子线程是否结束的标志,但这其中的问题是,若当前线程执行了一部分,TempOptMMStir掩码图像出现部分目标时,其非零像素个数已经大于零,但实际上还未得到最终的目标掩码图像,这就可能导致子线程还未执行完,主线程便提前结束休眠,开始执行,从而导致一系列的错误,最明显的错误是相关内存资源的提前释放,导致还未执行完成的子线程访问了已经释放资源的相关变量,进而出现错误,即出现野指针(对于图像的表征是:图像指针不为NULL,但其长度和宽度为零或无效数值)。

技术分享

图3

  图3从上至下的第三个红色矩形中,即是线程结束的判断方式。上面两个红色矩形是还未实现成功的C++ Thread类进行并发运行的方法,后面需进一步研究改进。

 

VS C++ 并发编程

标签:执行   read   子线程   derived   错误   开始   并发   技术   style   

原文地址:http://www.cnblogs.com/hust-yingjie/p/7050996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!