`
it_liuyong
  • 浏览: 100511 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex中多线程的实现

    博客分类:
  • flex
 
阅读更多
破阵子_如是我闻

如是我闻。一时佛在舍卫国,祗树给孤独园...

Flex中多线程的实现

最近在网上看到一个工具类可以提供flex中多线程的支持,AsyncThreading,googleCode地址   (【AsyncThreading_2[1].1.zip】下载地址),详细文档可以去googleCode上看

下面总结一下利用这个工具类来实现一个抽奖机的demo。
首先我们要编写一个自定义线程类,继承自AbstractAsyncThread并且实现IAsyncThreadResponder接口,
AbstractAsyncThread这个类可以控制线程的级别:
                 public const RUN_LEVEL_REAL_TIME:int = 1;
                public const RUN_LEVEL_HIGH:int = 3;
                public const RUN_LEVEL_ABOVE_NORMAL:int = 6:
                public const RUN_LEVEL_NORMAL:int = 8;
                public const RUN_LEVEL_BELOW_NORMAL:int = 12:
                public const RUN_LEVEL_LOW:int = 24;  

IAsyncThreadResponder这个接口提供了一个线程启动后调用的方法
                 function execute():void;

自定义线程对象类代码如下:
package threads
{
        import cn.ningyu.utils.Random;
       
        import com.symantec.premiumServices.asyncThreading.abstract.AbstractAsyncThread;
        import com.symantec.premiumServices.asyncThreading.interfaces.IAsyncThreadResponder;
       
        import mx.controls.Label;
        public class WorkBee extends AbstractAsyncThread implements IAsyncThreadResponder
        {
                private var _lab:Label;
                public function WorkBee(lab:Label)
                {
                        _lab = lab;
                        super();
                        super.priority = super.RUN_LEVEL_REAL_TIME;
                }
               
                public function execute():void
                {
                        var random:Random = Random.getInstance();
                        random.digit = 1;
                        random.radix = Random.NUMBER;
                        _lab.text = random.createRandom();
                }
               
        }
}

application中代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
       
        <mx:Script>
                <![CDATA[
                        import threads.WorkBee;
                        import com.symantec.premiumServices.asyncThreading.AsyncThreadingManager;
                        import mx.collections.ArrayCollection;
                       
                        private var threadList:ArrayCollection = new ArrayCollection();
               
                        private function init():void {
                                threadList = new ArrayCollection();
                                for(var i:int=0;i<7;i++) {
                                        var workBee:WorkBee;
                                        switch(i) {
                                                case 0:
                                                        workBee = new WorkBee(lab1);
                                                        break;
                                                case 1:
                                                        workBee = new WorkBee(lab2);
                                                        break;
                                                case 2:
                                                        workBee = new WorkBee(lab3);
                                                        break;
                                                case 3:
                                                        workBee = new WorkBee(lab4);
                                                        break;
                                                case 4:
                                                        workBee = new WorkBee(lab5);
                                                        break;
                                                case 5:
                                                        workBee = new WorkBee(lab6);
                                                        break;
                                                case 6:
                                                        workBee = new WorkBee(lab7);
                                                        workBee.wake()
                                                        break;
                                        }
                                        threadList.addItem(workBee);
                                }
                        }
                       
                        private function onClick():void {
                                if(btn.label == "开始抽奖") {
                                        for(var i:int=0;i<7;i++) {
                                                if(threadList[i].sleeping) {
                                                        threadList[i].wake();
                                                } else {
                                                        threadList[i].start();
                                                }
                                        }
                                        btn.label = "停止抽奖";
                                } else if(btn.label == "停止抽奖") {
                                        for(var i:int=0;i<7;i++) {
                                                threadList[i].sleep();
                                        }
                                        btn.label = "开始抽奖";
                                }
                        }
                       
                ]]>
        </mx:Script>
       
        <mx:FormItem verticalCenter="0" horizontalCenter="0" direction="horizontal" fontSize="50" fontWeight="bold">
                <mx:Label id="lab1"/>
                <mx:Label id="lab2"/>
                <mx:Label id="lab3"/>
                <mx:Label id="lab4"/>
                <mx:Label id="lab5"/>
                <mx:Label id="lab6"/>
                <mx:Label id="lab7"/>
                <mx:Button id="btn" label="开始抽奖" click="onClick()"/>
        </mx:FormItem>
</mx:Application>

注意的点:
线程方法:start()启动线程
          sleep()休眠线程
          sleeping线程是否处在休眠状态
          wake()重新激活线程
          kill()杀掉线程
async-threading 
还提供AsyncThreadingManager来管理所有的进程
提供的方法:
           shutDown()停掉所有的线程
           killAllThreads()杀掉所有的线程
还支持线程之间通信,利用sendMessageToThreads(name:String,body:Object):Boolean
将其中的代码移植到 Flex4的项目中 在创建线程的时候 报错
TypeError: Error #1009: Cannot access a property or method of a null object reference.
解决办法:
下载 AsyncThreading_2.1 源码到本地,修改 com.symantec.premiumServices.asyncThreading.handlers.FPSObserverHandler 中的代码 如下:
import mx.core.Application;
修改为:
import spark.components.Application;
private var _appRef:Application = Application.applicationas Application;
修改为:
private var _appRef:Application = FlexGlobals.topLevelApplication as Application;
OK 完成 错误解决!
分享到:
评论

相关推荐

    flex与C++多线程服务器端交互

    "flex与C++多线程服务器端交互"这个主题涉及了几个关键的技术点,包括Flex技术、Socket通信、多线程以及C++后端的实现。 首先,Flex是一种基于ActionScript的开放源代码框架,主要用于创建丰富的互联网应用程序...

    async-threading 让flex支持多线程

    "async-threading 让flex支持多线程"这个标题表明我们正在讨论如何在Adobe Flex环境中实现异步多线程处理。Flex是一种基于ActionScript的开放源码框架,常用于构建富互联网应用程序(RIA)。在Flex中,由于其默认的...

    flex的socket客户端连接java多线程socket服务端demo

    本示例探讨了如何使用Adobe Flex作为客户端,通过Socket接口与Java实现的多线程Socket服务端进行通信。以下是对这个主题的详细解释: 首先,Flex是一种开放源代码的富互联网应用程序(RIA)开发框架,它允许开发者...

    flex 现成开发包

    在Flex中,多线程是一个关键概念,尤其对于处理复杂计算或长时间运行的任务时,多线程能够提高应用程序的响应性和用户体验。 在Flex中,由于其运行在Flash Player或者Adobe AIR环境中,传统的多线程模型并不直接...

    多线程worker,AIR桌面版, HelloWorld(转)

    标题中的“多线程worker”指的是在编程中使用多线程技术来实现并发处理的机制。在计算机程序中,线程是程序执行的基本单元,一个进程中可以包含多个线程,它们共享同一内存空间,但各自拥有独立的执行路径。多线程...

    flex多文件上传控件(flex源码)

    了解以上知识点后,开发者可以对这个Flex多文件上传控件进行自定义,以适应特定项目的需求,如添加权限验证、文件预览功能、多线程上传等。总的来说,这个控件提供了一个灵活的基础,帮助开发者快速实现高效的文件...

    Flex 实现文件上传及进度显示

    10. **优化**:为了提高性能,可以考虑使用分块上传或多线程上传技术,尤其是处理大文件时。此外,还可以利用异步处理来避免阻塞UI。 以上就是使用Flex实现文件上传及进度显示的关键知识点,这些内容涵盖了从用户...

    Flex 上传多个文件

    另外,为了优化用户体验,可以考虑使用异步上传或多线程上传技术,比如使用SWFUpload或Plupload这样的第三方库,它们提供了更高级的多文件上传功能。 总的来说,Flex的多文件上传涉及到客户端的用户交互、文件选择...

    Flex 4: A multi threading solution(译文)

    总之,《Flex 4: 多线程解决方案》这篇文章提供了关于如何在Flex 4环境中实现多线程的指导,帮助开发者优化应用程序性能,提供更流畅的用户体验。通过理解和应用这些知识,我们可以更好地应对复杂的计算任务,同时...

    java+flex原码

    Java还支持多线程编程,适合处理大量并发请求。通过使用RESTful API或者SOAP Web服务,Java可以与Flex前端进行通信,传递数据和指令。 Flex作为前端,主要利用Adobe Flash Player或Adobe AIR运行,为用户提供动态、...

    flex4.6 air 读写文本文件

    在Flex 4.6与Adobe Integrated ...这只是一个基础示例,实际应用中可能需要考虑更多的细节,比如文件编码、多线程操作、异步处理等。但作为新手入门,掌握这些基础知识已经足够帮助你理解和构建简单的文件操作功能。

    asp.net实现多文件上传(Flex)

    4. 多线程处理:如果上传文件数量较大,可能需要多线程来异步处理,提高性能。 `FileUpload.html`文件可能是Flex应用的启动页面,其中包含Flex组件和与`upload.aspx`交互的AJAX请求。Flex部分的开发可能涉及以下...

    Flex4 in Action

    - **多线程处理**:利用 Flex 的多线程支持来处理耗时任务。 **8. Flex 项目管理和版本控制** 对于大型或团队协作的 Flex 项目,有效的项目管理和版本控制系统至关重要。常用的版本控制工具有 Git、SVN 等。此外,...

    flash builder4.7中worker类,多线程的使用

    总之,`Worker`类在Flash Builder 4.7中的引入为Flex开发者提供了一种高效且安全的多线程解决方案,使得复杂应用的性能得到显著提升。正确理解和利用这一特性,能让你的Flex应用变得更加响应迅速和用户友好。

    flex_test.rar_flex

    同时,对于大量文件上传,可能需要考虑分块上传和多线程处理以提高性能。 6. **用户体验**:在设计文件上传界面时,应考虑用户体验,如进度条显示、错误提示、取消上传功能等。 7. **Flex与Java集成**:BlazeDS或...

    flex jar包(很全)

    在处理多线程和并发任务时,这个库可能会被引入。 4. **commons-httpclient-3.0.1.jar**:Apache Commons HttpClient库,用于执行HTTP请求。在Flex应用中,如果需要与服务器进行HTTP通信,比如获取或发送数据,这个...

    Flex文件上传组件

    此外,优化上传速度和用户体验也很重要,比如使用多线程上传、断点续传等技术。 8. **状态管理**:由于文件上传可能需要时间,因此状态管理是关键。用户需要知道文件何时开始上传、上传进度以及是否成功。Flex提供...

    语法分析flex-2.5.2

    5. **性能优化**:Flex提供了多种选项来优化生成的词法分析器,如缓冲区大小、多线程支持等。 6. **Unicode支持**:Flex 2.5.2可能已经支持Unicode字符集,这对于处理非ASCII编码的编程语言至关重要。 7. **与其他...

    Java与Flex开发入门

    Java的核心特性包括垃圾回收、异常处理和多线程,使其成为企业级应用开发的理想选择。在Web开发领域,Java Servlets和JavaServer Pages(JSP)常用于构建动态网页,而Spring框架、Hibernate ORM和Struts等库则提供了...

    flash builder4.7 多线程worker类的使用视频3

    在Flex 4.7中,Worker类就是实现多线程功能的核心。Worker类允许开发者在主应用程序线程之外创建新的线程,这样主线程就可以专注于处理UI更新,而不会因为耗时操作而阻塞。 使用Worker类的步骤通常包括以下几个关键...

Global site tag (gtag.js) - Google Analytics