图像采集及处理多线程编程

本文介绍MFC中图像采集及图像处理的多线程编方法。创建了三个线程,分别为图像采集、图像处理及图像显示线程。线程之间的共享数据有保存的图像链表和图像处理结果存储结构。

图像链表:list<Hobject> imgList;
存储结构体:
struct ResultContainer
{
Hobject result_img;
HTuple time_needed;
HTuple result_handle;
HTuple result_data;
};

创建4个事件保证线程同步性

HANDLE  fgStopEvent;
HANDLE  newImageEvent;
HANDLE  newResultEvent;
HANDLE  containerIsFreeEvent;

使用2个关键段保证共享数据使用的互斥性

CRITICAL_SECTION    newImageMutex;
CRITICAL_SECTION    resultDataMutex;

同时在头文件中加入私有成员变量:

HANDLE             dispThrHandle;        //Win32线程句柄        
unsigned int       dispThreadId;         //Win32线程标识符  
HANDLE             ipThrHandle;          //Win32线程句柄
unsigned int       ipThreadId;           //Win32线程标识符
HANDLE             fgThrHandle;          //Win32线程句柄
unsigned int       fgThreadId;           //Win32线程标识符
  1. 在初始化中进行关键段的初始化,创建线程等其他数据初始化过程:
    关键段初始化:
  InitializeCriticalSection(&newImageMutex);    
  InitializeCriticalSection(&resultDataMutex);

设置事件句柄以同步线程:

fgStopEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
newImageEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
newResultEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
containerIsFreeEvent =CreateEvent(NULL,FALSE,TRUE,NULL);

初始化共享数据:

resultData.time_needed = NULL; 
resultData.result_img = NULL;
resultData.result_handle = NULL;
resultData.result_data = NULL;

其他:

ResetEvent(fgStopEvent);    //设置fgStopEvent为无信号状态</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值