vs2015中 QT线程和工业相机的热插拔实现

思路:为了实现热插拔(即插即用),我们肯定要实时的监控我们的主线程,所以就想到了用子线程来监控,这样就不会把主线程拖死,我们在子线程里不断的检测,当满足条件时,我们将信号发出,告诉主线程,我已经准备好了,主线程就可以执行一些操作。

实现:怎么创建线程这些的,网上很多,这里主要将怎么实现这个功能。

  1. 在子线程中定义好自己要发出的信号,这里不便不说,不会的百度很多。
    signals: void sendStart(); void sendStop();
  2. 在run函数中,将你的信号发出,中的emit就是发出信号的关键
int j = 0, z = 0;  //控制开关闭的次数的变量
	while (true)
	{
		pause.lock();
		if (gigeCameraM->getCameraNum() <= 0)
		{
			
			textLabelM->setText(QString::fromLocal8Bit("相机不存在"));
			if (z != 0) //关闭一次之后就只可以在打开
			{
				gigeCameraM->quit();  //相机不存在时,先停止线程
				emit sendStop(); //发出停止信号
				z = 0;  
				j = 0;
			}
			i++;
		}
		else
		{
			textLabelM->setText(QString::fromLocal8Bit("相机存在"));
			if (i != 0 || j <= 1)  //当第一次运行或中间拔出过相机就进入
			{
				emit sendStart(); //发出开始信号
				j++;
				i = 0;
				z++;
			}
		}
		pause.unlock();
		msleep(40);
	}

3.主线程中接收信号,用conntect接收子线程传出的信号,注:一定好先实例化出来再用connect,在开启线程,conntect中的第五个参数一定要有,要不然无法连接槽和信号。可以参考:
槽和信号无法连接的解决办法

cameraTestThread = new CameraTest(ui->cameraStateS, gigeCameraM/*, ui->SerialNumber*/); //实例化监控线程
connect(cameraTestThread, SIGNAL(sendStart()), this, SLOT(threadStartOperation()),Qt::DirectConnection);//接受开始信号
connect(cameraTestThread, SIGNAL(sendStop()), this, SLOT(threadStopOperation()), Qt::DirectConnection);//接受停止信号

cameraTestThread->start(); //启动

4.实现connect中的threadStartOperation()与threadStopOperation()函数。

void SampleView::threadStartOperation()  //当线程发出开始操作时,调用开始操作函数
{
	ui->SerialNumber->addItems(gigeCameraM->getSerialNumber());
	gigeCameraM->openCamera(ui->SerialNumber->currentText());//获取当前选择的相机序列号
	gigeCameraM->start();//启动进程
}

void SampleView::threadStopOperation() //当线程发出停止操作时,调用停止操作函数
{
	ui->SerialNumber->clear();
	gigeCameraM->closeCamera();
}

5.到这里就结束了,其中还有些关于工业相机的一些知识和实现,由你们慢慢去挖掘。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值