QT多线程的简单使用,主线程发一份数据,子线程收两份数据

先看效果图,示例发送数据“Hello World”

主线程:0x16f54aeda20,另两个子线程分别是0x4f1baff690、0x4f1baff6a0

因为在子线程中加了200ms、400ms延迟,所以打印是有先后顺序的

核心代码也就一丢丢。代码逻辑就是使用信号与槽使用线程之间产生联系

 1 MfBusiness::MfBusiness(QObject *parent) : QObject(parent)
 2 {
 3 connect(&se,&MfSendData::Sgl_Send,&re1,&MfRecvData1::On_Recv);
 4 connect(&se,&MfSendData::Sgl_Send,&re2,&MfRecvData2::On_Recv);
 5 re1.moveToThread(&th1);
 6 re2.moveToThread(&th2);
 7 th1.start();
 8 th2.start();
 9 }
10 void MfBusiness::DecodeData(QString str)
11 {
12 QByteArray data=str.toUtf8();
13 se.HandleData(data);
14 qDebug()<<"main";
15 qDebug()<<str;
16 qDebug()<<QThread::currentThread();
17 }

复杂的事情,我们要简单做,滴滴滴

原文地址:https://www.cnblogs.com/Kevinsh-Lee/p/11701219.html

时间: 2024-10-09 03:00:17

QT多线程的简单使用,主线程发一份数据,子线程收两份数据的相关文章

如何让 Qt 的程序使用 Sleep(主线程没有Sleep函数,但线程可用自带的保护函数Sleep)

熟悉的陌生人 Qt 是事件驱动的,所以当你用Qt的时候,几乎时时刻刻和 QEventLoop 打交道.,只是你可能没有意识到: QCoreApplicaton::exec() QApplication::exec() QDialog::exec() QThread::exec() QDrag::exec() QMenu::exec() ... 在前面列出的这些常见函数的背后,都有各自的QEventLoop,可能是我们很少有机会想到自己显式使用QEventLoop的缘故吧,对这个类似乎总是有些陌生

python进阶之多线程(简单介绍协程)

多线程 线程:实现多任务的另一种方式 一个进程中,也经常需要同时做多件事,就需要同时运行多个'子任务',这些子任务,就是线程 线程又被称为轻量级进程(lightweight process),是更小的执行单元 一个进程可拥有多个并行的(concurrent)线程,当中每一个线程,共享当前进程的资源 一个进程中的线程共享相同的内存单元/内存地址空间可以访问相同的变量和对象,而且它们从同一堆中分配对象通信.数据交换.同步操作 由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使

Qt 定时器signal/slot阻塞主线程界面

示例代码: <span style="font-size:18px;">class bicycle : public QMainWindow { public slots: void uploadDeviceStatus(); }; bicycle::bicycle(QWidget *parent) : QMainWindow(parent) { QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout(

多线程三:显示主线程执行的效果-第一种继承方式 继承Thread类

首先看下一个最简单的例子 继承Thread类 覆盖run方法

python多线程(等待)主线程和子线程的同步执行

#!/usr/bin/env python # -*- coding: utf-8 -*- import threading import time def fun(name, ls_name, front_thread = None): ''' 线程启动函数 通过front_thread来使用线程有序的运行 ''' time.clock() time.sleep(2) # 如果front_thread存在,则在front_thread运行完成后,才运行当前线程 if front_thread

dispatch_async 子线程,主线程的简单用法

子线程的使用方法: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //子线程的处理逻辑 }); DISPATCH_QUEUE_PRIORITY_DEFAULT 代表队列的优先级,包含以下参数 DISPATCH_QUEUE_PRIORITY_HIGH, DISPATCH_QUEUE_PRIORITY_LOW, DISPATCH_QUEUE_PRIORITY_BACKGROUND 0

在子线程中创建Handler和looper并与主线程进行交互

分析完上面那篇文章,基本理解了handler的实现原理,乘热打铁,这里我们利用handler原理,在子线程中创建一个handler和looper 可能很多面试时候问道,子线程中能不能new一个handler ? 答案是可以的,但是因为主线程系统默认在ActivityThread中已将帮我们创建好一个looper和MessagQueue,我们不需要手动去创建 (手动创建会出错,因为一个线程中默认只运行一个looper和MessageQueue,具体见ThreadLocal代码原理), 而子线程中没

C#子线程执行完后通知主线程(转)

其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿.  那么怎么让子线程去做主线程的事儿呢,我们只需要把主线程的方法传递给子线程就行了,那么传递方法就很简单了委托传值嘛: 下面有一个例子,子线程干一件事情,做完了通知主线程 public class Program { //定义一个为委托 public delegate void Entrust(string str); static void Main(string[] args) { Ent

c/c++中主线程退出,子线程也会退出

1 #include <windows.h> 2 #include <process.h> /* _beginthread, _endthread */ 3 #include <iostream> 4 5 using namespace std; 6 7 void show(void *ptr); 8 9 int main(){ 10 _beginthread(show, 0, NULL); //创建一个子线程 11 Sleep(10000); 12 return 0;