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. TensorFlow(十二):使用RNN实现手写数字识别

    上代码: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist ...

  2. AtCoder Grand Contest 001 题解

    传送门 \(A\) 咕咕咕 const int N=505; int a[N],n,res; int main(){ scanf("%d",&n); fp(i,1,n< ...

  3. 数据结构实验之查找三:树的种类统计(SDUT 3375)

    C: #include <stdio.h> #include <stdlib.h> #include <string.h> struct node { char d ...

  4. SDN与IXP

    IXP 互联网交换中心(IXP)在互联网生态系统中发挥着关键作用.在全球范围内,100多个国家/地区有超过400个IXP,其中最大的IXP具有接近10 Tbps的峰值数据速率并连接数百个网络.IXP提 ...

  5. Dp优化之决策单调栈优化

    证明:g(i) ≤ g(j)   (i ≤ j) 令 d=g(i) , k<d , 设cut = x表示 f(i) = f(x) + w[x,i]    ( x < i ) 构造一个式子: ...

  6. vue实现element-ui对话框可拖拽功能

    element-ui对话框可拖拽及边界处理 应业务需求,需要实现对话框可拖拽问题,应element-ui没有提供官方支持,于是便参考大神的文章,得出了适合业务需要的解决方案.很多大神给出的代码是没有解 ...

  7. Thingsboard学习之一CentOS安装系统更新

    首先安装好系统,查询到系统的IP地址后,使用Putty登入系统 更新系统 yum update 安装git yum install git 动图演示

  8. XGBoost、LightGBM、Catboost总结

    sklearn集成方法 bagging 常见变体(按照样本采样方式的不同划分) Pasting:直接从样本集里随机抽取的到训练样本子集 Bagging:自助采样(有放回的抽样)得到训练子集 Rando ...

  9. Linux Bash Shell j简单入门

    BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  10. (32位汇编 五)mov/add/sub/and/or/xor/not

    本文链接:https://blog.csdn.net/pl20140910/article/details/78227133说明符号 说明r 通用寄存器m 代表内存imm 代表立即数r8 代表8位通用 ...