c++海康工业相机回调函数MV_CC_RegisterImageCallBack在Qt多线程类QThread内使用时回调函数读取线程类成员变量的方法

项目是用Qt框架下接收海康工业相机图像并做进一步计算,每台相机建立一个线程类单独处理相机的图像接收和初步处理。相机由外部信号触发拍摄,经函数MV_CC_RegisterImageCallBack注册回调函数方式传回图片。

回调函数MV_CC_RegisterImageCallBack :

MV_CAMCTRL_API int __stdcall MV_CC_RegisterImageCallBack(void* handle,
        void(__stdcall* cbOutput)(unsigned char* pData, MV_FRAME_OUT_INFO* pFrameInfo, void* pUser),
        void* pUser);

回调函数:void(__stdcall* cbOutput)(unsigned char* pData, MV_FRAME_OUT_INFO* pFrameInfo, void* pUser) 只能是一个static void __stdcall 类型的函数,无法直接与线程类关联,因为是静态函数,也不能访问类成员变量,查看过函数的线程代号,与线程类不在同一个线程,所以图像数据不能直接返回到线程类内。

解决方法:

经void* pUser传递当前线程类的指针,在回调函数中取回。

//注册数据回调函数
    nRet = MV_CC_RegisterImageCallBack(mHandle, callback, this);  //void* pUser=this

线程类内声明回调函数:

static void __stdcall callback(unsigned char* pData, MV_FRAME_OUT_INFO* pFrameInfo, void* pUser);

this 为当前线程类的指针,

callback函数内部 : classname *p = (classname*) pUser; 

然后使用 p->类成员 即可访问线程类的成员,完成诸如图像返回,signal emit 的操作。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值