之前写了有关java线程的循环执行和结束,因为想制作成exe文件,想把执行的效果加到窗口上,所以就结合了JFrame和JPanel写了这个程序,这里直接贴出代码,在窗口上运行的效果下面有附图。
package thread;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 线程没完没了的循环
*
* @author FuJianyong
* 2015-6-16下午09:22:11
*/
public class EndlessLoop {
//是否结束线程的旗标
volatile boolean flag = true;
//控制是否输出数字
volatile boolean numIncrement = false;
class Endless extends Thread{
public void run(){
long startTime = System.currentTimeMillis();
writeString("线程开始正在生成随机数...");
Random random = new Random();
//随机数开关
int power = 0;
//计数
int i = 0;
while(flag){
power = random.nextInt(50);
writeString("while循环产生的随机数: " + power);
if(power == 19){
//结束线程
flag = false;
break;
}
for(;;){
power = random.nextInt(888);
if(power % 2 == 0 || power > 200){
//偶数则计数器增加
numIncrement = true;
}else{
//奇数则计数器停止增加
numIncrement = false;
}
if(numIncrement){
writeString("for循环产生的随机数是: " + power + " 计数器增加: " + ++i + " " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
try {
Thread.sleep(power * 2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
writeString("for循环产生的随机数是: " + power + " 计数器停止...");
break;
}
}
}
long endTime = System.currentTimeMillis();
writeString("线程结束等待垃圾回收...");
writeString("=====线程执行开始时间为: " + new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒").format(startTime));
writeString("=====线程执行结束时间为: " + new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒").format(endTime));
}
}
public void start(){
new Endless().start();
}
public static void main(String[] args) {
new EndlessLoop().start();
}
//重写构造方法
public EndlessLoop(){
JFrame frame = new JFrame("test");
frame.setLocation(500, 200);
frame.setSize(500, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(draw);
}
Draw draw = new Draw();
String temp0 = "";
String temp1 = "";
String temp2 = "";
String temp3 = "";
String temp4 = "";
String temp5 = "";
String temp6 = "";
String temp7 = "";
String temp8 = "";
String temp9 = "";
String temp10 = "";
class Draw extends JPanel{
public void paint(Graphics g){
super.paintComponent(g);
g.drawString(temp0, 20, 20);
g.drawString(temp1, 20, 50);
g.drawString(temp2, 20, 80);
g.drawString(temp3, 20, 110);
g.drawString(temp4, 20, 140);
g.drawString(temp5, 20, 170);
g.drawString(temp6, 20, 200);
g.drawString(temp7, 20, 230);
g.drawString(temp8, 20, 260);
g.drawString(temp9, 20, 290);
g.drawString(temp10, 20, 320);
g.dispose();
}
}
int i = 0;
public void writeString(String str){
switch(i){
case 0:
temp0 = str;
break;
case 1:
temp1 = str;
break;
case 2:
temp2 = str;
break;
case 3:
temp3 = str;
break;
case 4:
temp4 = str;
break;
case 5:
temp5 = str;
break;
case 6:
temp6 = str;
break;
case 7:
temp7 = str;
break;
case 8:
temp8 = str;
break;
case 9:
temp9 = str;
break;
case 10:
temp10 = str;
break;
}
if(i>10){
temp1 = temp2;
temp2 = temp3;
temp3 = temp4;
temp4 = temp5;
temp5 = temp6;
temp6 = temp7;
temp7 = temp8;
temp8 = temp9;
temp9 = temp10;
temp10 = str;
}
i++;
draw.repaint();
}
}
- 大小: 25 KB
分享到:
相关推荐
另一种方式是通过信号槽机制,利用QObject的threadAffinity属性和moveToThread()函数,将特定对象移动到其他线程中运行。 2. 使用QThread防止界面假死 首先,创建一个继承自QThread的子类,并重写run()函数,将耗时...
深入学习这份源码,我们可以学习到如何在易语言中实现线程的创建和管理,理解线程间通信的方法,以及如何设计一个高效的窗口模块来处理用户交互和数据展示。此外,还能了解到如何通过事件驱动的方式来实现异步编程,...
多线程是操作系统提供的一种并发执行机制,允许程序中同时运行多个独立的执行流。在MFC中,可以通过CWinThread类创建和管理线程。每个线程都有自己的消息循环,可以独立处理不同的任务,从而避免主线程被长时间运算...
当`ticket`等于0时,打印“票已售罄”,并终止循环,从而结束线程的运行。 #### 三、线程同步的实现机制 在Java中,线程同步可以通过多种方式实现,其中最常见的就是`synchronized`关键字和显式锁(如`...
易语言提供了控制窗口透明度的函数,结合计次循环,可以实现窗口从完全可见到不可见,再从不可见到完全可见的过渡。 5. **换页与返回**:在多窗口或页面应用中,窗口的切换和回退是常见需求。通过计次循环和窗口...
线程是进程中的一个执行单元,每个进程至少有一个线程,可以有多个并发运行的线程。线程共享进程的内存空间,但拥有自己的栈空间和程序计数器,这样它们可以并行执行不同的任务。 `CreateThread`函数是Windows API...
在Windows编程中,我们通常会依赖窗口消息循环来实现定时器,但这并不总是最理想的解决方案,尤其是在不需要用户界面或者想要在后台运行任务的情况下。本文将探讨如何利用线程实现一个非窗口类的定时器,这对于新手...
标题提到的“不依赖窗口的单线程Timer”是一种特殊类型的计时器,它并不依赖于Windows消息循环中的WM_TIMER消息来工作。这种设计可以提供更灵活的计时器使用方式,尤其是在不需要创建和管理窗口的场景下。 首先,...
用pyqt5设计了一个主窗体,在窗体运行时需要把一个无限循环放在一个线程去工作。运行后,发现通过鼠标按主窗体的关闭按键关闭主创体后,线程不会自动终止,依然在运行。尽管对我的使用场景来说,这不是问题,因为...
在软件开发中,尤其是涉及到图形用户界面(GUI)的应用程序,界面线程和工作线程之间的通讯是一个重要的设计环节。界面线程,通常被称为主线程,负责处理用户交互和更新UI,而工作线程则用于执行耗时的操作,避免...
在C# Winform开发中,多线程技术是不可或缺的一部分,尤其当涉及到用户界面(UI)的异步操作时。线程允许程序同时执行多个任务,提高应用的响应性和效率。本话题将深入探讨如何利用线程来延迟创建子窗体,并且如何安全...
结束循环` 用于构成无限循环,确保线程持续运行直到被显式终止。 对于鼠标点击操作,易语言提供了“模拟鼠标点击”命令,可以模拟用户点击鼠标左键或右键。例如,要模拟在坐标(100, 200)处点击左键,我们可以写成:...
- **调试限制**:在IDE中无法调试多线程代码,必须生成EXE文件运行。 - **线程安全**:确保所有被多线程使用的变量都已经声明,避免使用隐式声明。 - **资源释放**:当线程完成时,确保释放所有资源,包括关闭窗口等...
在本项目“多线程实现人脸快速循环比对”中,开发者利用了seetaface人脸识别库和MFC(Microsoft Foundation Classes)框架来构建一个高效的人脸识别和比对系统。这里我们将详细探讨涉及的知识点。 首先,seetaface...
10. 异常处理:尽管在上述内容中没有明确提到,但在实际的多线程编程中,应当注意异常情况的处理,比如处理因找不到窗口句柄而产生的错误,以确保程序的稳定运行。 通过上述内容的解析,我们可以看到多线程同步操作...
综上所述,"易语言简单线程读网页"源码不仅展示了如何在易语言中创建和管理线程,还涉及到网络请求、数据解析、线程同步以及错误处理等多个核心编程概念。对于想要学习易语言网络编程的初学者来说,这是一个很好的...
通常,我们不会直接继承QThread,而是创建一个类并重写run()方法,然后在run()中执行我们需要在新线程中运行的代码。 **4. WorkThread类** 在描述中提到的`WorkThread`类是一个继承自`QThread`的自定义类。这个类...
在单个中央处理器的系统中,尽管看起来线程好像是同时运行的,但实际上它们并非并发执行。这是因为CPU快速地在不同线程之间切换执行代码。当一个线程使用到其时间片时,它会等待下一次机会继续执行代码。在这期间,...
2. **消息处理**:当一个新的消息到达时,消息循环会将其发送到相应的窗口过程进行处理。 - **示例**:在Windows编程中,可以通过编写 `WndProc` 方法来处理特定的消息。 ```csharp protected override void ...