干净的终止一个线程  我曾经在第2章产生一个后台线程,用以输出一张屏幕外的 bitmap 图.我们必须解决的一个最复杂的问题就是,如果用户企图结束程序,而这张bitmap 图尚未完成,怎么办?第2章的一个鸵鸟做法就是在任何 worker 线程还没完成其工作之前,不准用户结束程序.只要修改主消息循环,使消息循环不得在任何一个 worker 线程尚未结束之前结束,即可办到.这种做法的最大优点就是"简单",但万一 bitmap 图十分复杂,需要很长的工作时间,那么程序有可能看起来像是&quo…
有没有过这样的经验?你坐在你的车子里,目的地还在好几公里之遥,而时间已经很晚了.你拼命想告诉那些挡住你去路的人们,今天这个约会对你是多么多么重要,能不能请他们统统--呃--滚到马路外?很不幸,道路系统并没有纳入所谓的优先权观念.如果有某条专用道是给"非常重要"的通行所用的,你就可以摆脱那些如潮水般在你四周的车辆和行人,岂不甚妙?    Win32 有所谓的优先权(priority)观念,用以决定下一个获得 CPU 时间的线程是谁.较高优先权的线程必然获得较多的 CPU 时间.关于优先权…
使用线程的一个常见问题就是如何能够在一个线程开始运行之前,适当地将它初始化.初始化最常见的理由就是为了调整优先权.另一个理由是为了在SMP 系统中设定线程比较喜欢的 CPU.第10 章谈到 MFC 时我们会看到其他一些理由.    基本问题在于,你需要一个线程 handle,才能够调整线程的性质.但如果你以默认型式调用 CreateThread(),新线程会如脱缰野马一下子就起跑了,你根本来不及进行初始化设定操作.    解决之道就是 CreateThread() 的第5个参数,它允许你指定线程…
/** * Created by JuTao on 2017/2/4. * 如何中止一个线程 */ public class ThreadDone { public static void main(String[] args) throws InterruptedException { MyRunnable myRunnable=new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); Thread.sl…
先来给出每个文件的相关代码然后再加以分析 //*************dialog.h**************// #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #define MAXSIZE 5  //最大的线程数 class QDialogButtonBox; class QProgressBar; class QPushButton; class WorkThread; class ThreadDlg : public Q…
这一章描述如何初始化一个新线程,如何停止一个执行中的线程,以及如何了解并调整线程优先权.    读过这一章之后,你将有能力回答一个 Win32 多线程程序设计的最基本问题.你一定曾经在 Usenet 的 Win32 论坛中一再地看过这个问题.当我开始在 Win32 上使用线程时,这个问题就一直在折磨我.我花了数天甚至数周的时间来寻找答案,并且希望找到的是一个好答案.    这个问题是:  我如何在某个线程内终止另一个正在运行的线程? 我们将在这一章看到答案,以及诸如"在一个线程中控制其他线程&q…
参考了一下两个网站的介绍: ①:http://blog.csdn.net/liuhanhan512/article/details/7077601 ②:http://www.blogjava.net/jinfeng_wang/archive/2008/04/27/196477.html 总结出结束java线程的方法, 两手准备:标志位变量,interrupt()方法. ————参见①的介绍,和②的List C的例子 个人理解: 标志位用来彻底并精确的结束线程的执行:interrupt()用来防止…
1.使用Thread.stop()? 极力不推荐此方式,此函数不安全且已废弃,具体可参考Java API文档 2.设置终止标识,例如: import static java.lang.System.out; public class TestThread extends Thread { private boolean terminationFlag; public void run() { for (int i = 0; i != 10000000; ++i) { if (terminatio…
在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋的.在本篇文章中,我们将引入另外一种机制(ConnectionHolder)来完成事务管理. ConnectionHolder的工作机制是:我们将Connection对象放在一个全局公用的地方,然后在不同的操作中都从这个地方取得Connection,从而完成Connection共享的目的,这也是一种ServiceLocator模式…
许多应用程序创建的线程花费了大量时间在睡眠状态来等待事件的发生.还有一些线程进入睡眠状态后定期被唤醒以轮询工作方式来改变或者更新状态信息.线程池可以让你更有效地使用线程,它为你的应用程序提供一个由系统管理的工作者线程池.至少会有一个线程来监听放到线程池的所有等待操作,当等待操作完成后,线程池中将会有一个工作者线程来执行相应的回调函数. 你也可以把没有等待操作的工作项目放到线程池中,用QueueUserWorkItem函数来完成这个工作,把要执行的工作项目函数通过一个参数传递给线程池.工作项目被放…