16,239
社区成员
发帖
与我相关
我的任务
分享
#ifndef MYSOCKETTHREAD_H
#define MYSOCKETTHREAD_H
#include <QObject>
#include <QTimer>
#include <QThread>
#include <QTcpSocket>
#include <QHostAddress>
#include <QDebug>
class MySocketThread : public QObject
{
Q_OBJECT
public:
MySocketThread() : m_pQTcpSocket(new QTcpSocket), m_pQThread(new QThread())
{
m_pQThread->start();
m_pQTcpSocket->moveToThread(m_pQThread);
this->moveToThread(m_pQThread);
connect(this, SIGNAL(DoConnectToHost()),
this, SLOT(OnConnectToHost()));
connect(m_pQTcpSocket, SIGNAL(connected()),
this, SLOT(OnConnected()));
connect(this, SIGNAL(DoStartTimer()),
this, SLOT(OnStartTimer()));
emit DoStartTimer();
}
~MySocketThread()
{
m_pQThread->exit();
m_pQThread->wait(10 * 1000);
delete m_pQThread;
}
void ConnectToHost()
{
emit DoConnectToHost();
}
protected:
void timerEvent(QTimerEvent *e)
{
qDebug() << "MySocketThread timerEvent:" << QThread::currentThreadId();
QObject::timerEvent(e);
}
signals:
void DoStartTimer();
void DoConnectToHost();
private slots:
void OnStartTimer()
{
this->startTimer(1000);
}
void OnConnectToHost()
{
qDebug() << "MySocketThread connectToHost:" << QThread::currentThreadId();
m_pQTcpSocket->connectToHost(QHostAddress::LocalHost, 8811);
}
void OnConnected()
{
qDebug() << "MySocketThread connected:" << QThread::currentThreadId();
}
private:
QTcpSocket * const m_pQTcpSocket;
QThread * const m_pQThread;
};
#endif // MYSOCKETTHREAD_H
#ifndef MYSOCKETTHREAD_H
#define MYSOCKETTHREAD_H
#include <QObject>
#include <QTimer>
#include <QThread>
#include <QTcpSocket>
#include <QHostAddress>
#include <QDebug>
class MySocketThread : public QObject
{
Q_OBJECT
public:
MySocketThread() : m_pQTcpSocket(new QTcpSocket), m_pQThread(new QThread()), m_pQTimer(new QTimer())
{
m_pQTimer->setInterval(1000);
m_pQThread->start();
m_pQTcpSocket->moveToThread(m_pQThread);
this->moveToThread(m_pQThread);
m_pQTimer->moveToThread(m_pQThread);
connect(m_pQTimer, SIGNAL(timeout()),
this, SLOT(OnTimerOut()));
connect(this, SIGNAL(DoStartTimer()),
m_pQTimer, SLOT(start()));
connect(this, SIGNAL(DoConnectToHost()),
this, SLOT(OnConnectToHost()));
connect(m_pQTcpSocket, SIGNAL(connected()),
this, SLOT(OnConnected()));
emit DoStartTimer();
}
~MySocketThread()
{
m_pQThread->exit();
m_pQThread->wait(10 * 1000);
delete m_pQTimer;
delete m_pQThread;
}
void ConnectToHost()
{
emit DoConnectToHost();
}
signals:
void DoStartTimer();
void DoConnectToHost();
private slots:
void OnConnectToHost()
{
qDebug() << "MySocketThread connectToHost:" << QThread::currentThreadId();
m_pQTcpSocket->connectToHost(QHostAddress::LocalHost, 8811);
}
void OnConnected()
{
qDebug() << "MySocketThread connected:" << QThread::currentThreadId();
}
void OnTimerOut()
{
qDebug() << "MySocketThread timeout:" << QThread::currentThreadId() << m_pQTcpSocket->isWritable();
}
private:
QTcpSocket * const m_pQTcpSocket;
QThread * const m_pQThread;
QTimer * const m_pQTimer;
};
#endif // MYSOCKETTHREAD_H
能给你一定的启发了吗,你可以在外面打印一下线程ID,对比一下这个类里面打印的ID,是不是一样的.