1、信号&槽 机制 即可

 ZC:个人暂时 测试下来,类似是 PostMessage(...)的方式:

  a、是在各自的线程中执行代码,

  b、调用 emit不耗时(指的意思是 像调用PostMessage(...)一样 扔完就算,具体 slot中需要执行多久 不关“emit ???()”的事)

2、测试代码:

 2.1、h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QThread> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow(); private slots: void slot01(); void on_pushButton_3_clicked(); private:
Ui::MainWindow *ui; int FiCnt;
public:
void UpdateCnt();
}; class TthreadZ :public QThread
{
Q_OBJECT
public:
explicit TthreadZ(QObject *parent = ){}
~TthreadZ(){} protected:
void run(); signals:
void signal01(); }; #endif // MAINWINDOW_H

 2.2、cpp

#include "mainwindow.h"
#include "ui_mainwindow.h" #include "UdpSocket_ClientZ.h" #include <QThread>
#include <Windows.h> MainWindow *g_pMainWindow = nullptr; void TthreadZ::run()
{
while ()
{
DWORD dwThreadId = ::GetCurrentThreadId(); DWORD dw1 = ::GetTickCount();
emit signal01();
DWORD dw2 = ::GetTickCount(); qDebug() << "TthreadZ.dwThreadId : " << dwThreadId << ". Take time : " << dw1 << " --> " << dw2 << " : " << (dw2-dw1)<<"ms"; // if (g_pMainWindow != nullptr)
// g_pMainWindow->UpdateCnt(); Sleep();
qDebug() << "";
}
} MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); g_pMainWindow = this;
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::slot01()
{
DWORD dwThreadId = ::GetCurrentThreadId(); DWORD dw1 = ::GetTickCount();
UpdateCnt();
DWORD dw2 = ::GetTickCount(); qDebug() << "MainWindow.dwThreadId : " << dwThreadId << ". Take time : " << dw1 << " --> " << dw2 << " : " << (dw2-dw1)<<"ms";
} void MainWindow::UpdateCnt()
{
FiCnt ++;
ui->plainTextEdit->appendPlainText(QString::number(FiCnt));
Sleep();
} void MainWindow::on_pushButton_3_clicked()
{
qDebug() << "on_pushButton_3_clicked(1)";
//UpdateCnt();
TthreadZ* p = new TthreadZ();
p->start(); qDebug() << "on_pushButton_3_clicked(2)";
connect(p, &TthreadZ::signal01, this, &MainWindow::slot01);// ZC: 注意这里的参数 函数指针
}

 2.3、界面

  

 2.4、控制台输出

on_pushButton_3_clicked(1)
on_pushButton_3_clicked(2)
TthreadZ.dwThreadId : 5344 . Take time : 3605015 --> 3605015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3605015 --> 3605515 : 500 ms TthreadZ.dwThreadId : 5344 . Take time : 3606015 --> 3606015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3606015 --> 3606515 : 500 ms TthreadZ.dwThreadId : 5344 . Take time : 3607015 --> 3607015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3607015 --> 3607515 : 500 ms TthreadZ.dwThreadId : 5344 . Take time : 3608015 --> 3608015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3608015 --> 3608531 : 516 ms TthreadZ.dwThreadId : 5344 . Take time : 3609015 --> 3609015 : 0 ms
MainWindow.dwThreadId : 4468 . Take time : 3609015 --> 3609531 : 516 ms

3、

4、

5、

线程.Qt更新界面的更多相关文章

  1. Android--Handler的用法:在子线程中更新界面

    本文主要介绍Android的Handler的用法.Handler能够发送Messsage和Runnable对象到与其相关联的线程的消息队列. 每一个Handler对象与创建它的线程相关联.而且每一个H ...

  2. Swing中耗时任务需要另起新线程,这个新线程中更新GUI的操作仍需由EDT来做(转)

    最近调试程序时发现,点击某个界面时会出现卡死的情况,出现的频率还是比较频繁的. 再次出现卡死的情况后,利用jvisualvm查看线程的运行情况,dump操作之后发现线程间出现了死锁:Found one ...

  3. 使用Handler在子线程中更新UI

    Android规定仅仅能在主线程中更新UI.假设在子线程中更新UI 的话会提演示样例如以下错误:Only the original thread that created a view hierach ...

  4. 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常

    在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件.但对于数据绑定bindingList而言,没法响应 ...

  5. qt动态更新界面的菜鸟代码,请指出

    qt简单界面更新代码(菜鸟级)(部分代码) self.timers_1=QtCore.QTimer(self) self.timers_1.timeout.connect(self.min_1) se ...

  6. qt简单界面更新代码(菜鸟级)(部分代码)

    qt简单界面更新代码(菜鸟级)(部分代码)self.timers_1=QtCore.QTimer(self)self.timers_1.timeout.connect(self.min_1)self. ...

  7. Qt UI界面改了,但UI界面不更新

    /**************************************************************************** * Qt UI界面改了,但UI界面不更新 * ...

  8. c#后台线程更新界面

    参考文章<C# 线程更新UI界面> 主窗口 public frmMain() { InitializeComponent(); } /// <summary> /// 主窗口加 ...

  9. Android app主线程UI更新间歇性崩溃的问题

    对App进行开发测试时,偶尔出现app崩溃的问题.日志如下: 10-25 18:44:52.935 15290-15290/com.zzq.cnblogs E/AndroidRuntime﹕ FATA ...

随机推荐

  1. HashMap与HashTable的理解与区别

    Hashtable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2.虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了 ...

  2. 学到了武沛齐讲的Day13完 转义字符

    字典 values():值keys():键items():逐条列出 ----------------------------------------------下一day 转义字符 描述\(在行尾时) ...

  3. vue自定义弹框

    vue 全局自定义简单弹框 https://www.jianshu.com/p/1307329aa09e https://www.cnblogs.com/crazycode2/p/7907905.ht ...

  4. ueditor从word粘贴公式

    官网地址http://ueditor.baidu.com Git 地址 https://github.com/fex-team/ueditor 参考博客地址 http://blog.ncmem.com ...

  5. P1143 进制转换

    漂亮小姐姐点击就送:https://www.luogu.org/problemnew/show/P1143 题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入输出格式 输入格式: 输入数据共 ...

  6. 在默认使用apache中央仓库时, 报错 protocol_version

    https://cloud.tencent.com/developer/ask/136221/answer/241408 2018年6月,为了提高安全性和符合现代标准,不安全的TLS 1.0和1.1协 ...

  7. 【原创】go语言学习(二十)并发编程

    目录 并发和并行 Goroutine初探 Goroutine实战 Goroutine原理浅析 Channel介绍 Waitgroup介绍 Workerpool的实现 并发和并行 1.概念A. 并发:同 ...

  8. 经常用到(创建OS)的命令

    1. 将汇编代码编译为二进制模块文件 nasm mbr.asm -o mbr                         nasm loader.asm -o loader 2. 将wirte.c ...

  9. MongoDB之安装部署

    一.安装MongoDB 在安装MongoDB之前,应该先把MongoDB官方网站上下载下来,下载的地址如下: https://www.mongodb.com/download-center 下载完毕之 ...

  10. cas系列-cas登出(四)

    跟登陆一样,登出操作也很重要.由于是多应用间操作,状态保持也是一个要点,根据登出的影响范围,可以将登出操作分为两类: 单应用登出 单点登出(多应用登出) 顾名思义,单应用登出即登出只影响被操作的应用会 ...