18.QThread线程创建

记录一下Qt线程的创建,主要是方便以后复用代码

1 线程创建

/**********************************************************************************************
* ThreadRecvData.h
* 描述:本线程类主要功能实现从服务器接收数据.
* 作者:xhome
* 时间:2020/5/8
*********************************************************************************************/


#pragma once

#include <QThread>


class ThreadRecvData : public QThread {
	Q_OBJECT
public:
	explicit ThreadRecvData(QObject *parent = 0);
	~ThreadRecvData();

	void stop();

protected:
	void run();

signals:

public slots:

private:
	bool m_stopFlag;
};

/**********************************************************************************************
* ThreadRecvData.cpp
* 描述:本线程类主要功能实现从服务器接收数据.
* 作者:xhome
* 时间:2020/5/8
*********************************************************************************************/


#include "ThreadRecvData.h"
#include <QDebug>

ThreadRecvData::ThreadRecvData(QObject *parent) :QThread(parent)
{
	m_stopFlag = false;

	qDebug() << "ThreadRecvData ok.";

}

void ThreadRecvData::run()
{

	while (!m_stopFlag)
	{
		QThread::sleep(1);

		qDebug() << "ThreadRecvData +++++++++++";

	}

}

ThreadRecvData::~ThreadRecvData()
{
}

void ThreadRecvData::stop()
{
	m_stopFlag = true;
}

线程调用及销毁

	mThreadRecvData = new ThreadRecvData(this);
	mThreadRecvData->start();
    mThreadRecvData->stop(); //结束线程.

线程阻塞唤醒

#ifndef PTHREADDEVCMD_H
#define PTHREADDEVCMD_H

#include <QObject>
#include <QThread>
#include <QHostAddress>
#include <QUdpSocket>
#include <QHostInfo>
#include <errlog.h>
#include <QWaitCondition>
#include <QMutex>

// add by xhome 2019/3/6
//设备命令下发线程
class pthreadDevCmd : public QThread
{
    Q_OBJECT
public:
    explicit pthreadDevCmd(QObject *parent = 0);
    ~pthreadDevCmd();
    void run();
    void stop();

signals:
    void errMsg(QString);

public slots:
    //接收ui主程发射来的设备命令信号
    void recvDevCmdSlot();

private:
     bool m_stopFlag;
     QWaitCondition devCmdWaitCond;
     QMutex mutex;
};

#endif // PTHREADDEVCMD_H

#include "pthreaddevcmd.h"

pthreadDevCmd::pthreadDevCmd(QObject *parent) : QThread(parent)
{
    m_stopFlag = false;
}
pthreadDevCmd::~pthreadDevCmd()
{

}

void pthreadDevCmd::run()
{
    QUdpSocket udpServerSocket;

    qDebug() <<"pthreadDevCmd start ok!";

    if(false == udpServerSocket.bind(QHostAddress::LocalHost, 10002, QUdpSocket::ShareAddress|QUdpSocket::ReuseAddressHint))
    {
        mDebug << "Failed to bind.";
   //     emit errMsg("Failed to bind");
    }
    else
    {
        qDebug() << "pthreadDevCmd bind ok.";
    }

    while(!m_stopFlag)
    {
        mutex.lock();
        devCmdWaitCond.wait(&mutex);
        mutex.unlock();

        qDebug() << "devCmdWait test.";

        //分析传递来的cmd指令,依据不同的指令,向特定的装备上,传递命令消息.


    }
}

void pthreadDevCmd::stop()
{
    m_stopFlag = true;
}

//接收ui主程发射来的设备命令信号
void pthreadDevCmd::recvDevCmdSlot()
{
    qDebug() << "recv dev cmd from ui.";
    devCmdWaitCond.wakeOne();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangshui516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值