QThread的常见特性: run()是线程的入口,就像main()对于应用程序的作用.QThread中对run()的默认实现调用了exec(),从而创建一个QEventLoop对象,由其处理该线程事件队列(每一个线程都有一个属于自己的事件队列)中的事件.简单用代码描述如下: 1 int QThread::exec() 2 { 3 //... 4 QEventLoop eventLoop; 5 int returnCode = eventLoop.exec(); 6 //... 7 return…
当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System…
故事的开端是这样的,小白是一个程序员,他确实也是一个小白,目前还在程序员发展的道路上,兢兢业业的小心求学. 有一天,小白接到一个任务,完成一个Winform程序,附加一个功能就是可以读IC卡. 小白终于有机会一展身手了!!不免内心兴奋. 再联系了IC卡厂家,拿到开发SDK后,小白不久就碰到了以下难题: 1.厂家的读卡器是通过API给定的事件ReadCard()驱动的,而读卡器在ReadCard事件驱动以后,可以在往后的3s以内侦测是否有IC卡片在附近: (1)3s内,有IC卡在设备附近,立即读卡…
原文:C# Winform 窗体界面"假死"后台线程阻塞 解决办法–BeginInvoke 这个方法可以用在任何后台任务耗时较长,造成界面“假死”界面控件不更新的情况. 比如要要执行的数据库操作是几十万条的update语句,如果在click事件里阻塞或者做Thread.Sleep或一个耗时很长的操作,窗口就会无响应点不动了.故需要用this.BeginInvoke方法来异步执行UI线程的操作,更新界面显示. //导入按钮点击事件 private void btn_import_Clic…
用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后,界面可以随意移动,感觉不到后台在做大量数据的读取和绑定 private void btnQuery_Click(object sender, EventArgs e) { // 查询按钮点击后,按钮文本由"查询"改为"加载中",并把按钮状态改为不可点击 btnQuer…
c#中可以用BeginInvoke去启动异步调用,但是有两个BeginInvoke一个是controller的BeginInvoke还有一个是委托的BeginInvoke. 主要区别是controller的BeginInvoke会返回到主线程中执行.如果在Winform中使用了controller得BeginInvoke去执行一些费时的操作任然会使界面假死. controller的BeginInvoke使用方法是先定义一个委托 如 delegate void UpdateUI(string s)…
最近一个项目需求中的一个功能是需要用progressBar反映处理文件的进度. 研究了Invoke和BeginInvoke方法. Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托. Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托. 我开始的想法是开一个线程处理,代码如下: private delegate void DoDataDelegate(object numb…
http://www.cnblogs.com/Charltsing/p/publisher.html 最近测试task并发任务的效率与线程池的区别,发现了另外一个问题.task建立任务的速度很快,输出到UI的信息过频,导致UI假死. private void TestMakeTasks(object obj) { string msg = ""; //循环创建task for (int i = 0; i < 3000; i++) { //主线程(winform)--子线程(Thr…
这段时间花了点时间配置了在qtcreator5.9.1上开发ros gui界面的环境,终于可以实现导入工程,插断点调试了.总结起来需要注意以下几点: 1.安装插件ros_qtc_plugin,ROS与C++入门教程-搭建开发环境(QT+ros_qtc_plugin) 2.配置加载ROS环境,并设置快捷方式. 3.正确的ROS工作空间,推荐创建一个ROS工作空间(ROS Workspace) 4.正确配置qt的编译环境.遇到问题可参考链接,或者给我留言. 如果以上几步都做对了,那么ros gui的…
首先要检查那些滥用 Timer.Dispacher Timer 或者滥用什么“线程+死循环+阻塞”轮询的代码. 这种是编程大忌,有些人不会设计事件驱动程序,而是滥用轮询. 若是:触发事件后的假死,搜WPF  Dispatcher…
1.继承JFrame 2.定义需要的组件 3.创建组件 4.设置布局管理器 5.添加组件 6.显示窗体 --------------------------------------------- 小代码: /*** * 功能页面:GUI界面开发 * * BorderLayout演示 * @author yanlong * 2017/6/4 * 1.继承JFrame * 2.定义你需要的组件 * 3.创建组件 * 4.添加组件 * 5.对窗体设置 * 6.显示窗体 */package com.te…
当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Syste…
参考这个帖子 http://blog.csdn.net/chyoma/article/details/50839715…
目录 一.前言 二.QThread源码浅析 2.1 QThread类的定义源码 2.2 QThread::start()源码 2.3 QThreadPrivate::start()源码 2.4 QThread::run()源码 2.5 QThread::quit().QThread::exit().QThread::terminate()源码 2.6 章节小结 三.四种Qt多线程的实现方法 3.1 子类化QThread 3.1.1 步骤 3.1.2 不使用事件循环实例 3.1.3 使用事件循环实…
问题 (1)ConcurrentLinkedQueue是阻塞队列吗? (2)ConcurrentLinkedQueue如何保证并发安全? (3)ConcurrentLinkedQueue能用于线程池吗? 简介 ConcurrentLinkedQueue只实现了Queue接口,并没有实现BlockingQueue接口,所以它不是阻塞队列,也不能用于线程池中,但是它是线程安全的,可用于多线程环境中. 那么,它的线程安全又是如何实现的呢?让我们一起来瞧一瞧. 源码分析 主要属性 // 链表头节点 pr…
QCoreApplication最重要的函数便是exec(),我们便从这个函数开始分析QCoreApplication都干了什么. 先列出exec()函数的源码 static int exec();//函数声明 /*! Enters the main event loop and waits until exit() is called. Returns the value that was set to exit() (which is 0 if exit() is called via qu…
为什么要做多线程,说个最简单的道理就是我们不希望在软件处理数据的时候界面处于无法响应的假死状态.有些处理是灰常花时间的,如果把这样的处理放到主线程中执行,就会导致软件一条路走到底,要等到处理完才能接收响应其他操作,这时候就会导致界面假死. Qt提供了一个方法用于在提醒软件先处理下未处理的事情,QApplication::processEvents(),所以,如果在主线程中处理一些耗时操作,可以试下频繁的调用QApplication::processEvents()来提醒系统去处理那些未处理的事.…
用户控件中有一个树,窗体使用了这个控件,但是重命名时执行node.text="XXXX" 执行了很长时间,大约9s,在此期间winform界面假死,尝试过多线程异步委托的方式来操作, 还是假死 再次单步调试,虽然树节点绑定了很多事件,但都是很快就执行完毕的,树是一次加载的,数据量比较大,大约7w个节点,用dot trace跟踪了一下,得到如下结果 -9,309ms System.Windows.Forms.TreeNode.set_Text(String) --9,309ms Syst…
Delphi的高效不多说... 俗话说:真正的程序员用C语言,聪明的程序员用Delphi,一点都不假,和C++比它比C++更简单,更容易上手,功能丝毫不逊色C++,比起VB,毫无疑问比VB好多了,重要的是快,高效! 高效的Pascal编译器,强大的数据库支持==.... Delphi在进行计算量相当大的时候会出现程序假死,在线程编程的时候会出现线程堵塞,更重要的是在线程编程时可以大大加快程序的效率..我们可以用这个函数:Application.ProcessMessages; //防止线程堵塞,…
最近一直在写一个winform程序,对各类文档文件,以及压缩包的内容进行关键字检测. 模型出来之后,执行了一下,发现连续测试后,会有内存不足的问题,导致程序面假死.脑袋懵逼了两天. 回头看我的变量容器List,使用的是静态变量,思路如下: 上图是修改之后的  最初为  : private static List<Inform_Model> Model_List =new List<Inform_Model>(); 但是! static静态全局变量的生命周期是跟随程序结束而GG的:…
Home / Qt 学习之路 2 / Qt 学习之路 2(74):线程和 QObject Qt 学习之路 2(74):线程和 QObject  豆子  2013年12月3日  Qt 学习之路 2  22条评论 前面两个章节我们从事件循环和线程类库两个角度阐述有关线程的问题.本章我们将深入线程间得交互,探讨线程和QObject之间的关系.在某种程度上,这才是多线程编程真正需要注意的问题.本文很大部分翻译自文档,如果有翻译不当的地方,以文档描述为准. 现在我们已经讨论过事件循环.我们说,每一个 Qt…
本文章挑出QThread源码中部分重点代码来说明QThread启动到结束的过程是怎么调度的.其次因为到了Qt4.4版本,Qt的多线程就有所变化,所以本章会以Qt4.0.1和Qt5.6.2版本的源码来进行浅析. QThread类的定义源码 Qt4.0.1版本源码: #ifndef QT_NO_THREAD class Q_CORE_EXPORT QThread : public QObject { public: ...//省略 explicit QThread(QObject *parent =…
本章会挑出QThread源码中部分重点代码来说明QThread启动到结束的过程是怎么调度的.其次因为到了Qt4.4版本,Qt的多线程就有所变化,所以本章会以Qt4.0.1和Qt5.6.2版本的源码来进行浅析. 一.QThread类的定义源码 Qt4.0.1版本源码: #ifndef QT_NO_THREAD class Q_CORE_EXPORT QThread : public QObject { public: ...//省略 explicit QThread(QObject *parent…
jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuery 插件可供使用.看看下面这些惊人的功能和效果,我相信你会发现一些很有用的东西. 基于 jQuery 实现的 Ajax 异步分页 jPages 是一款非常不错的客户端分页插件,有很多特色,例如自动播放.按键翻页.延迟加载等等 源码下载      在线演示 老牌的响应式 jQuery 幻灯片效果 Sl…
其实这只是给自己看的一个configure选项笔记,没有太多的东西. 首先: 下载qt5.6的源码: 地址: http://download.qt.io/archive/qt/5.6/ 下载完解压: tar  -xvf   qt-everywhere-opensource-src-5.6.0.tar.gz 解压完进入源代码 : 修改几个东西: 1. 进入qtbase/mkspecs 里面, 复制一份linux-arm-gnueabi-g++    ,名字为linux-arm 在进入 linux-…
此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React Native 源码学习方法及其他资源. 最后的章节给大家介绍 React Native 源码的查阅方法,以便你进行更加高阶的开发与研究时参阅,并分享了开发过程中可能遇到的众多问题的解决方案,以及与 React Native 开发相关.本书相关的一些线上资源. 15.6 React Native 源码剖析 我们在学习了 React Native 开发的方方面面之后,我们再次回到 Rea…
工作快一年了,近期打算研究一下JDK的源码,也就因此有了死磕java系列 ArrayList 是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口. ArrayList 继承了AbstractList,实现了List.它是一个数组队列,提供了相关的添加.删除.修改.遍历等功能. ArrayList 实现了RandmoAcce…
最近一直在学习Android,在各大社区逛,总结下自己看到的一些不错的源码.希望可以给大家带来帮助. 1.Android精品源码:带动态效果的Button(按钮) 最喜欢各种效果的按钮了,没办法就是这么的呆萌是不是?带动态效果的Button(按钮)可要比静态的按钮炫酷的多了,大家看到效果图就知道了,那么Android开发者们快动手做一个自己喜欢的动态按钮吧! 很炫的效果图,源码下载点击:Android精品源码:带动态效果的Button(按钮) 2.一个漂亮的按钮库[Android精品] 一个不要…
前言 在Android开发的多线程应用场景中,Handler机制十分常用 接下来,深入分析 Handler机制的源码,希望加深理解 目录 1. Handler 机制简介 定义一套 Android 消息传递机制 作用 在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理 为什么要用 Handler消息传递机制 答:多个线程并发更新UI的同时 保证线程安全.具体描述如下 总结 使用Handler的原因:将工作线程需操作…
1.学习切入点 JDK的并发包中提供了几个非常有用的并发工具类. CountDownLatch. CyclicBarrier和 Semaphore工具类提供了一种并发流程控制的手段.本文将介绍CountDownLatch(闭锁)的实现原理.在了解闭锁之前需要先了解AQS,因为CountDownLatch的实现需要依赖于AQS共享锁的实现机制. 官方文档: https://docs.oracle.com/javase/8/docs/api/ 百度翻译如下: 一种同步辅助程序,允许一个或多个线程等待…