`
zlele
  • 浏览: 37369 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

线程以及缓冲区

阅读更多
1.线程
    我们把正在计算机中执行的程序叫做"进程"。所谓"线程",是"进程"中某个单一顺序的控制流。在单个程序中同时运行多个线程完成不同的工作,称为多线程。通俗的说法,之前编的程序如果一个指令没进行完,则不能进行下一个指令,或者不能关闭窗口。利用多线程,可以完成多个指令的同时运行。
      需要继承Thread
public class Hua extends Thread{
	private Graphics g;
	private JFrame jf;
	private int j=0;
public Hua(JFrame jf,Graphics g){ 
	this.g=jf.getGraphics();   
	this.jf=jf;
}
//运行的方法
public void run(){
   draw(g);
}
//画小孩的方法
public void draw(Graphics g2){
	int juli=160;
		g2.setColor(Color.black);
		if(j<juli)
		j++;
		if(j==juli)
			j=juli;
			g.fillOval(60+j, 460, 40,40);//头
			g.drawLine(80+j, 500, 70+j, 520);
			g.drawLine(80+j, 500,90+j, 520);
			g.drawLine(80+j, 500, 80+j, 540);//竖
			if(60+j+j<100+j)
			   g2.drawLine(80+j, 540, 60+j+j, 560);//腿1
			if((60+j+j>=100+j)&&(60+j+j<=100+40+j)){
				g2.drawLine(80+j, 540,140, 560);//腿1
			}
			if((100+80+j>60+j+j)&&(60+j+j>100+40+j))
				g2.drawLine(80+j, 540, 100+j+j-120, 560);//腿1
			if(100+80+j<60+j+j)
				g2.drawLine(80+j, 540, 220, 560);//腿1
			/************腿2****************/
			if(100>=60+j)
				g2.drawLine(80+j, 540,100, 560);
			if((100<60+j)&&(60+j+j-40<100+j))
			   g2.drawLine(80+j,540,60+j+j-40,560);//腿2
			if((60+j+j-40<=140+j)&&(60+j+j-40>=100+j)){
				g2.drawLine(80+j, 540,180, 560);//腿2
			}
			if(60+j+j-40>140+j){
				g2.drawLine(80+j, 540,60+j+j-120, 560);//腿2
			}
		
				try {
					Thread.sleep(40);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}

}
}

在调用Hua的页面中实例化Hua类,并开始运行
 Hua hua=new Hua(this,gg);
		  hua.start();

可多个同时运行
2.缓冲区
在制作动画的时候发现背景总是闪,因为 先用背景色覆盖整个组件,然后再调用paint(Graphics g)函数,重新绘制图形。这样,我们每次看到的都是一个在新的位置绘制的图形,前面的图形都被背景色覆盖掉了。这就像一帧一帧的画面匀速地切换,以此来实现动画的效果。  但是,正是这种先用背景色覆盖组件再重绘图像的方式导致了闪烁。如果先把背景和图像画好,再画在界面上,效果会好些。
      新组件:BufferedImage

 while(true){
            //在内存中创建一个缓冲画图对象
		    BufferedImage buffer=new BufferedImage(this.getWidth(),this.getHeight(),BufferedImage.TYPE_INT_BGR);
		    
		    //得到缓冲图对象的画布
		    Graphics g=buffer.getGraphics();
this.getHeight());
		    //画背景,把背景画在缓冲图上
		    g.drawImage(image.getImage(), x, 0, null);
		    g.drawImage(image.getImage(), x+image.getIconWidth(), 0, null);
     	    x-=2;
			if(x+image.getIconWidth() <=0 ){
				x=0;
			}
		     hua.draw(g); 
		    //画好之后显示缓冲图上的图片
		    gg.drawImage(buffer, 0, 0, null);
	     }
分享到:
评论
1 楼 ayaome 2014-03-20  

相关推荐

    qt 多线程共享全局缓冲区

    本篇文章将深入探讨如何在Qt 5.12.3中实现多线程,并且讲解如何安全地在不同线程间共享全局缓冲区。 在Qt中,我们可以使用QThread类来创建和管理线程。QThread提供了信号和槽机制,使得线程间的通信变得更加方便。...

    Delphi 多线程缓冲区绘图实例

    在本文中,我们将深入探讨如何使用Delphi进行多线程缓冲区绘图,这是一个非常实用的技术,特别是在处理大型图像或需要高效更新用户界面的应用中。Delphi作为一个强大的面向对象的编程环境,提供了丰富的多线程支持,...

    三缓冲区 多线程处理,抓包例子

    在这个场景下,libpcap可能被用来初始化网络接口,设置过滤规则,以及将捕获的数据包写入到缓冲区中供多线程处理。 在Linux环境中,利用这些技术可以构建高性能的网络监控工具,例如网络安全分析、流量统计或协议...

    Go-Go中的线程安全循环缓冲区环形缓冲区实现了io.ReaderWriter接口

    在Go语言中,线程安全的循环缓冲区(也称为环形缓冲区)是一种高效的数据结构,常用于多线程环境中的数据通信和同步。它允许数据在生产者和消费者之间流动,而无需复杂的锁定机制。Go的标准库并没有提供现成的线程...

    arrayBuffer(环形缓冲区)

    这个类提供了读写操作以及查看缓冲区状态的接口,并且特别强调了对多线程同步访问的支持。这意味着在多线程环境中,当多个线程尝试同时访问缓冲区时,会通过锁机制来确保数据的一致性和完整性,防止数据竞争条件的...

    Qt5.12.9多线程双缓冲串口类使用

    在Qt中,可以通过创建两个`QByteArray`对象作为缓冲区,然后在线程间进行安全的数据交换。 **串口通信**是设备间通过串行接口进行数据传输的方式。Qt5提供了`QSerialPort`类来处理串口操作,如打开、关闭串口,设置...

    delphi 多线程+图片缓冲区

    在本主题中,我们将深入探讨如何在Delphi中动态添加TImage控件,并结合多线程技术以及图片缓冲区来实现高效绘图。 首先,让我们了解一下**多线程**。在单线程应用中,所有任务都在同一个线程中执行,可能导致UI...

    线程读写缓冲

    读缓冲区用于暂时存储从共享资源读取的数据,而写缓冲区则用于暂存线程准备写入共享资源的数据。这种设计使得线程可以在不干扰其他线程的情况下进行读写操作,提高了程序的并行性。 在Delphi编程环境中,实现线程...

    C语言环形缓冲区

    在这个示例中,你可以学习如何创建和管理线程,以及如何利用这些同步机制来实现环形缓冲区的多线程读写操作。 总之,C语言实现的环形缓冲区是解决多线程环境下的数据通信问题的有效工具。通过理解和实践这样的设计...

    labview 环形缓冲区组件

    例如,它可以支持多线程读写,以及自定义的溢出策略等高级特性。 在实际应用中,环形缓冲区广泛应用于信号处理、数据记录、图像处理和通信系统等领域。例如,在一个实时信号监测系统中,环形缓冲区可以持续收集...

    动画线程双缓冲(j2me)

    这个文件可能包括了创建动画线程、双缓冲区的初始化、绘图逻辑以及线程间同步等关键部分。通过阅读和理解这个源程序,开发者可以学习如何在J2ME环境中实现流畅的动画效果。 总结来说,"动画线程双缓冲"是J2ME开发中...

    环形缓冲区实现原理

    5. 互斥访问(Mutual Exclusion):为了防止多个线程或进程同时对环形缓冲区进行读写操作时产生冲突,通常需要采用某种形式的同步机制来实现互斥访问。 环形缓冲区的实现原理中,当读指针或写指针到达缓冲区的尾部...

    实验六 键盘缓冲区问题

    3. **缓冲区的管理**:操作系统负责管理键盘缓冲区,包括读取输入、清空缓冲区以及处理缓冲区满的情况。当缓冲区满时,新的输入将被阻塞,直到有空间可用。 4. **输入处理**:有两种常见的输入模式:同步和异步。...

    循环缓冲区类-应用于大型缓冲区

    1. **构造函数**:初始化缓冲区大小,以及头指针和尾指针的位置。 2. **写入操作**:`write` 方法,将数据写入缓冲区。当缓冲区满时,可能需要根据策略决定是否丢弃旧数据或阻塞写操作。 3. **读取操作**:`read` ...

    缓冲区查询代码

    在IT领域,缓冲区查询是优化数据访问性能的关键技术之一,尤其在大数据处理、数据库系统以及网络通信中广泛应用。缓冲区的基本概念是将频繁访问的数据存储在内存中的一个区域,以便快速读取和写入,减少对底层存储...

    操作系统课程设计有限缓冲区问题的实现

    当缓冲区为空时,生产者线程被阻塞,直到消费者线程释放空缓冲区。 **2. 设计目的** 设计的主要目的是通过实现这个经典的生产者-消费者问题来加强学生对于线程及其同步机制的理解。这有助于学生更好地掌握以下关键...

    无锁 环形缓冲区

    无锁环形缓冲区是一种在多线程编程中常见的数据结构,它被广泛应用于高效并发环境中的数据交换。无锁(Lock-Free)意味着在访问共享数据时,无需使用传统的锁机制来确保线程安全,而是依赖于原子操作(Atomic ...

    C实现循环缓冲区,线程交替执行,进行数据读取

    在C语言中实现循环缓冲区,首先需要定义一个固定大小的缓冲区,通常使用结构体来封装缓冲区的指针、读写位置索引以及缓冲区大小等信息。例如: ```c typedef struct { char* buffer; // 缓冲区指针 size_t size; ...

    c# AE gp 缓冲区

    1. **内存管理**:理解如何在GPU上分配和释放内存,以及如何有效地管理缓冲区生命周期,避免内存泄漏和碎片化。 2. **数据传输**:了解如何在CPU和GPU之间高效地传输数据,如使用CUDA或OpenCL进行并行计算。 3. **...

Global site tag (gtag.js) - Google Analytics