当前位置:网站首页>QT_QThread线程
QT_QThread线程
2022-08-01 17:33:00 【小小工程员】
QT_QThread线程

注意的是:在线程中不能调用槽函数,否则会出现意想不到的错误,如调用w.show等!可以发出信号让某个槽函数响应,即尽量让线程独立,解耦合。
设计对窗口的操作,都要放到槽中去做。在线程中不要做
头文件
#pragma once
#include <QThread>
#include <QMutex>
#include "opencv2/core.hpp" // Mat所在的头文件
class XVideoThread :public QThread //单件模式,不要拿这个类去创建对象,只做接口调用。
{
Q_OBJECT // 信号与槽才会有效
public:
//单件模式 获取对象
static XVideoThread* Get() //通过一个静态函数;
{
static XVideoThread vt; //这个对象只生成一个,称之为单件模式; 只能通过这个get方式获取对象,进行调用,保证 对象具有唯一性。
return &vt; //返回指针类型
}
void Play() {
mutex.lock(); isPlay = true; mutex.unlock(); }; //打开视频
void Pause() {
mutex.lock(); isPlay = false; mutex.unlock(); };
~XVideoThread();
//线程入口函数
void run();
signals:
protected:
QMutex mutex; //线程互斥
XVideoThread(); //构造函数放在保护中,在外部就无法用这个类去生成对象。
};
/* 如何使用这种单件模式? 接口调用方法: XVideoThread::Get()获取这个对象vt,再通过指针调用这个对象的成员函数Open。 if (!XVideoThread::Get()->Open(file)) { QMessageBox::information(this, "error", name+" open failed!"); return; } */
源文件
#include "XVideoThread.h"
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
#include "XFilter.h"
using namespace std;
using namespace cv;
void XVideoThread::run() //注意的是,当线程被销毁的时候,这个线程有可能没被销毁,导致关闭程序时显示程序被shutdown掉。
{
for (;;)
{
mutex.lock(); //锁的原则,尽晚调用,尽早退出
if (isexit)
{
mutex.unlock(); //尽早退出,一定不能遗漏
break;
}
if (!isPlay) //如果处于暂停
{
mutex.unlock();
msleep(5);
continue;
}
msleep(s); //根据fps设定帧间隔
mutex.unlock(); //一定记得各个条件下都要退出
}
}
XVideoThread::XVideoThread()
{
start(); //线程启动。XVideoThread继承public QThread 这个类,XVideoThread中重载了void run();函数,则调用start()后,则会创建一个线程,并把run()函数变成入口函数
}
XVideoThread::~XVideoThread()
{
// terminate(); //粗暴的终止线程。
mutex.lock(); //线程先锁住。
isexit = true; //等待一次run()函数中for循环完毕后,将isexit标志位置为真,run()函数结束。 相当于线程退出操作quit(); 。
mutex.unlock(); //线程解掉
wait(); //等待线程的退出!!! 必须在这里等待线程执行完退出
}
边栏推荐
- 创造建材数字转型新视界,中建材如何多边赋能集团业务快速发展
- 金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(2. 概述)
- GRUB2的零日漏洞补丁现已推出
- TCP百万并发服务器优化调参
- 金仓数据库KingbaseES安全指南--6.3. Kerberos身份验证
- DevExpress的GridControl帮助类
- GridControl helper class for DevExpress
- RecSys'22|CARCA: Cross-Attention-Aware Context and Attribute Recommendations
- 网上开户佣金万一靠谱吗,网上开户安全吗
- 金仓数据库 KingbaseES V8.3 至 V8.6 迁移最佳实践(4. V8.3 到 V8.6 数据库移植实战)
猜你喜欢
随机推荐
金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(2. 概述)
极化微波成像概述
今年最火爆的词:商业分析,看这一篇就够了!
一加OnePlus 10RT出现在Geekbench上 产品发布似乎也已临近
自定义注解实现日志打印时屏蔽特定字段不打印
03 gp cluster construction
sql添加索引
Winform的UI帮助类——部分组件会使用到DevExpress组件
极化微波成像概述3
块级元素、行内元素、行内块元素
RecSys'22|CARCA: Cross-Attention-Aware Context and Attribute Recommendations
08 Spark cluster construction
C#的DateTime帮助类
深圳市商务局2022年度中央资金(跨境电子商务企业市场开拓扶持事项)申报指南
参观首钢园
06 redis cluster structures
SQL的substring_index()用法——MySQL字符串截取
B011 - 基于51的多功能指纹智能锁
千万级乘客排队系统重构&压测方案总结篇
星途一直缺颠覆性产品?青岛工厂这款M38T,会是个突破点?









