当前位置: 首页 > news >正文

网站建设公司有哪些内容互联网舆情信息

网站建设公司有哪些内容,互联网舆情信息,wordpress web user,网站备案用户名忘了怎么办QThread QThread类枚举类型成员函数可重写函数公共槽信号静态成员函数保护函数静态保护函数QThread简单案例1QThread简单案例2 QThread类 标准头文件&#xff1a;#include <QThread> qmake: QT core 继承(父): QObject枚举类型 线程的优先级 enum Priority { IdlePri…

QThread

  • QThread类
    • 枚举类型
    • 成员函数
    • 可重写函数
    • 公共槽
    • 信号
    • 静态成员函数
    • 保护函数
    • 静态保护函数
    • QThread简单案例1
    • QThread简单案例2


QThread类

标准头文件:#include <QThread>
qmake:	QT += core
继承():	QObject

枚举类型

线程的优先级

enum Priority { IdlePriority, LowestPriority, LowPriority, NormalPriority, HighPriority,, InheritPriority }

{ 空闲优先级,最低优先级,低优先级,正常优先级,高优先级,…,继承优先级 }

此枚举类型指示操作系统应该如何调度新创建的线程。

常数价值描述
QThread::IdlePriority0仅在没有其他线程运行时调度。
QThread::LowestPriority1调度频率低于低优先级。
QThread::LowPriority2计划频率低于正常优先级。
QThread::NormalPriority3操作系统的默认优先级。
QThread::HighPriority4比正常优先级计划得更频繁。
QThread::HighestPriority5比高优先级计划得更频繁。
QThread::TimeCriticalPriority6尽可能经常安排。
QThread::InheritPriority7使用与创建线程相同的优先级。这是默认值。

成员函数

类型方法说明
构造函数QThread(QObject *parent = nullptr)参数父类QObject指针
virtual~QThread()虚析构函数,当基类指针指向子类时,使用delete时,会先调用子类析构函数,在调用父类构造函数,释放资源。
QAbstractEventDispatcher *eventDispatcher() const
voidexit(int returnCode = 0)
boolisFinished() const
boolisInterruptionRequested() const
boolisRunning() const
intloopLevel() const
QThread::Prioritypriority() const
voidrequestInterruption()
voidsetEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
voidsetPriority(QThread::Priority priority)
voidsetStackSize(uint stackSize)
uintstackSize() const
boolwait(QDeadlineTimer deadline = QDeadlineTimer(QDeadlineTimer::Forever))阻塞线程,直到满足以下任一条件,这提供了与POSIX pthread_join()函数相似的功能。
boolwait(unsigned long time)

可重写函数

virtual bool	event(QEvent *event) override

公共槽

何为公共槽函数,就是可以被子类直接调用

void	quit()
void	start(QThread::Priority priority = InheritPriority)
void	terminate()

信号

void	finished()
void	started()

静态成员函数

QThread *	create(Function &&f, Args &&... args)
QThread *	create(Function &&f)
QThread *	currentThread()
Qt::HANDLE	currentThreadId()
int		idealThreadCount()
void	msleep(unsigned long msecs)
void	sleep(unsigned long secs)
void	usleep(unsigned long usecs) //强制当前线程休眠微秒。
//[将当前线程的执行让给另一个可运行线程(如果有)。请注意,操作系统决定切换到哪个线程。]
void	yieldCurrentThread()

保护函数

int	exec()
virtual void	run()

静态保护函数

基于enabled参数启用或禁用当前线程的终止。线程必须是由QThread启动的。

void	setTerminationEnabled(bool enabled = true)

QThread简单案例1

官方的例子,值得信赖
例如:Worker 是我们创建的一个子线程。
继承QObject的优点:内存回收安全,支持信号与槽。

例如:Controller 是主线程。

共同点:他们都继承自QObject

代码里面的connect的这种写法我比较推荐,参数怎么变都不影响,减少修改次数

这种线程的特点:任务线程里面的每个槽函数都是一个事件循环,即你可以处理耗时操作,读写文件,数据计算,大量循环等等(目前我我是使用这种方法,还不错)。

class Worker : public QObject
{Q_OBJECTpublic slots:void doWork(const QString &parameter) {QString result;/* ... 处理大数据 ... */emit resultReady(result); //处理完数据,发到主线程显示}signals:void resultReady(const QString &result);
};class Controller : public QObject
{Q_OBJECTQThread workerThread;//线程栈 自动销毁,推荐使用
public:Controller() {Worker *worker = new Worker; //创建任务子线程worker->moveToThread(&workerThread);	//添加到线程,实际应该可以添加多个任务子线程。connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);//线程完成这个任务,就将这个任务线程对象删除connect(this, &Controller::operate, worker, &Worker::doWork);//发射信号,通知任务线程做事。connect(worker, &Worker::resultReady, this, &Controller::handleResults);//接收任务子线程处理好的数据workerThread.start(); //正式开启线程,}~Controller() {workerThread.quit();	//先退出没处理的任务workerThread.wait();	//已经在处理的任务,等待处理完,在退出}
public slots:void handleResults(const QString &);
signals:void operate(const QString &);
};

任务插槽中的代码将在一个单独的线程中执行。但是,您可以自由地将任务线程的插槽连接到来自任何对象、任何线程的任何信号。由于一种称为排队连接的机制跨不同线程连接信号和插槽是安全的

QThread简单案例2

让代码在单独的线程中运行的另一种方法是子类化QThread并重新实现run()。这种使用的场景一般是不需要和主线程交互,比如只完成文件写操作等等。
例如:

//任务线程
class WorkerThread : public QThread
{Q_OBJECTvoid run() override {QString result;/* ... here is the expensive or blocking operation ... */emit resultReady(result);}
signals:void resultReady(const QString &s);
};
//主线程 分配任务
void MyObject::startWorkInAThread()
{WorkerThread *workerThread = new WorkerThread(this);//传入this,就是QObject的指针,资源的释放,即是线程的构造函数传参。connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);workerThread->start();//开启run()方法
}

在该示例中,线程将在run函数返回后退出。除非调用exec(),否则线程中不会运行任何事件循环(即做完这件事,就不再执行事件循环了)。


重要的是要记住,QThread实例存在于实例化它的旧线程中,而不是存在于调用run()的新线程中。这意味着所有QThread的队列槽和调用的方法都将在旧线程中执行。因此,希望在新线程中调用槽的开发人员必须使用工作对象方法;新插槽不应该直接在子类化的QThread中实现。


与排队槽或调用的方法不同,直接在QThread对象上调用的方法将在调用该方法的线程中执行。当子类化QThread时,请记住构造函数在旧线程中执行(主线程id一致),而run()在新线程中执行(线程id新的)。如果一个成员变量是从两个函数中访问的,那么这个变量是从两个不同的线程中访问的。检查这样做是否安全。


注意:在跨不同线程与对象交互时必须小心。一般来说,函数只能从创建QThread对象本身的线程中调用(例如setPriority()),除非文档中另有说明。

http://www.hkea.cn/news/910302/

相关文章:

  • 石家庄网站建设哪家专业中国联通腾讯
  • 能访问各种网站的浏览器百度一下网页搜索
  • 自己做网站花多少钱雅虎搜索
  • 哈尔滨招标信息网网站推广优化排名教程
  • 个人可以建论坛网站吗福清网络营销
  • 济南做网站优化价格百度推广网站一年多少钱
  • 做网上商城网站哪家好杭州seo靠谱
  • 做营销网站制作关键词优化课程
  • 网站移动终端建设口碑营销成功案例
  • 美国做试管婴儿 网站推广普通话宣传语
  • 网站备案信息查询系统软文发布平台媒体
  • 泊头哪给做网站的好制作网页的教程
  • 漳州建设银行网站首页在百度上打广告找谁
  • 网站免费建站k网络营销策划方案书
  • 网站建设类公网店推广的作用
  • 安平做网站除了百度指数还有哪些指数
  • 做网站公司 蓝纤科技知乎怎么申请关键词推广
  • 临沂免费做网站发表文章的平台有哪些
  • 网站推广的方式包括哪些广西网站建设制作
  • 杭州营销网站建设东莞网站建设哪家公司好
  • 企业做营销型网站手机如何制作网页
  • 连云港网站关键词优化seo自学教程
  • 网站全站出售淘宝关键词排名怎么查询
  • 龙口市规划建设局网站查询收录
  • 学校网站建设注意什么东莞网站营销推广
  • 网站设计模板是什么百度网盘人工客服电话多少
  • wordpress文章收缩长春seo优化企业网络跃升
  • 网站地图调用希爱力双效片骗局
  • 珠海网站建设维护友情链接买卖代理
  • 武汉企业网站推广外包网络广告营销案例分析