TCP多任务通信

TCP多任务通信(同一个Server同时为多个Client服务)
多任务概念
一、单核CPU
二、多核CPU
(1) 并行(真正的多任务)
(2)并发 (虚假的多任务)

一、单核CPU: 同一时间只能处理一个程序,当存在多个程序时,CPU每0.000001s(假设极短时间)依次运行一个程序,循环往复,离散近似为连续(称为:时间片轮转)
在这里插入图片描述
二、多核CPU:
(1) 同一时间一个CPU只能运行一个程序,当程序少于CPU核数时为真正的同时执行多任务。(称为:并行)
在这里插入图片描述
(2) 当程序多于CPU核数时为假的多任务。(称为:并发)
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中,可以通过QThread类来实现多线程,通过QTcpSocket类来实现TCP通信。 以下是实现步骤: 1. 创建一个继承自QThread的子类,用于执行网络通信的任务。在子类中实现run函数,该函数中实现TCP通信的具体逻辑。 2. 在主线程中创建一个QThread对象,并将子类对象移到新线程中。调用子类对象的start函数启动线程。 3. 在主线程中创建一个QTcpSocket对象,并将其连接到子类对象的信号和槽函数中。 4. 在子类对象中实现TCP通信的具体逻辑,例如建立连接、发送数据、接收数据等。 5. 在程序退出时,需要确保线程和TCP连接被正确关闭,以避免资源泄漏和错误。 以下是示例代码: ``` // MyThread.h #include <QThread> #include <QTcpSocket> class MyThread : public QThread { Q_OBJECT public: explicit MyThread(QObject *parent = nullptr); protected: void run() override; signals: void dataReceived(const QByteArray &data); private: QTcpSocket *m_socket; }; // MyThread.cpp #include "MyThread.h" MyThread::MyThread(QObject *parent) : QThread(parent) { m_socket = new QTcpSocket(this); } void MyThread::run() { m_socket->connectToHost("127.0.0.1", 1234); if (m_socket->waitForConnected()) { emit dataReceived("Connected".toUtf8()); m_socket->write("Hello, World!"); if (m_socket->waitForBytesWritten()) { emit dataReceived("Data sent".toUtf8()); } if (m_socket->waitForReadyRead()) { QByteArray data = m_socket->readAll(); emit dataReceived(data); } m_socket->disconnectFromHost(); } } // MainWindow.h #include <QMainWindow> #include "MyThread.h" class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void onDataReceived(const QByteArray &data); private: Ui::MainWindow *ui; MyThread *m_thread; }; // MainWindow.cpp #include "MainWindow.h" #include "ui_MainWindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); m_thread = new MyThread(this); connect(m_thread, &MyThread::dataReceived, this, &MainWindow::onDataReceived); m_thread->start(); } MainWindow::~MainWindow() { delete ui; m_thread->quit(); m_thread->wait(); } void MainWindow::onDataReceived(const QByteArray &data) { ui->textEdit->append(data); } ``` 在这个示例中,MyThread类继承自QThread类,用于执行TCP通信的任务。MainWindow类继承自QMainWindow类,用于显示接收到的数据。 在程序启动时,MainWindow类创建了一个MyThread对象,并将其start函数调用,将其放置到新线程中执行。 MyThread类在run函数中执行TCP通信的流程,包括连接到服务器、发送数据、接收数据等。在数据接收时,MyThread类通过signal-slot机制将数据传递给MainWindow对象,MainWindow对象在onDataReceived函数中将数据显示在界面上。 在程序退出时,MainWindow类需要确保MyThread对象和TCP连接被正确关闭。在MainWindow类的析构函数中,首先调用MyThread对象的quit函数停止线程,然后调用wait函数等待线程结束。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值