`
windmark
  • 浏览: 32207 次
社区版块
存档分类
最新评论

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

    博客分类:
  • AIR
 
阅读更多

关于多线程的例子和教程各位大侠已经发过很多了。但是大多数都是针对fp而言的。

但是针对air,多线程的实现方式就麻烦一些了。

这里要大体阐述下多线程的机制,as3中的多线程创建方式有些猎奇,他是根据包含多线程的swf文件的字节流创建的。这也就是为什么在web项目中,可以通过WorkerDomain.current.createWorker(this.loaderInfo.bytes);来创建一个worker。其意义就是通过自身的字节流this.loaderInfo.bytes来创建。

但是我们在air的桌面项目中,用此方法就行不通了,因为air中的loaderInfo.bytes并不是那个线程的swf的字节流(或许是格式不对或许是包含的东西不一样,我的个人理解,反正与单纯web版出来的东西是不一样的)

所以在air中只有如下三种方式可以创建多线程。
第一二中方法在如今的fb4.6里相对繁琐一些。等到下周的fb4.7beta出来以后将会方便很多。

(一)通过swf文件,用[Embed]来引入
如:

 

 // Embed the SWF file
 [Embed(source="../swfs/BgWorker.swf", mimeType="application/octet-stream")]
 private static var BgWorker_ByteClass:Class;
 
 private function createWorker():void
 {
   // create the background worker
   var workerBytes:ByteArray = new BgWorker_ByteClass();
   var bgWorker:Worker = WorkerDomain.current.createWorker(workerBytes);
   
   // listen for worker state changes to know when the worker is running
   bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler);
   
   // set up communication between workers using 
   // setSharedProperty(), createMessageChannel(), etc.
   // ... (not shown)
   
   bgWorker.start();
 }

 

在我之前的文章 中已有关于这个方法的例子

(二)通过swf文件,用URLLoader 来引入
如:

// load the SWF file
 var workerLoader:URLLoader = new URLLoader();
 workerLoader.dataFormat = URLLoaderDataFormat.BINARY;
 workerLoader.addEventListener(Event.COMPLETE, loadComplete);
 workerLoader.load(new URLRequest("BgWorker.swf"));
 
 private function loadComplete(event:Event):void
 {
   // create the background worker
   var workerBytes:ByteArray = event.target.data as ByteArray;
   var bgWorker:Worker = WorkerDomain.current.createWorker(workerBytes);
   
   // listen for worker state changes to know when the worker is running
   bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler);
   
   // set up communication between workers using 
   // setSharedProperty(), createMessageChannel(), etc.
   // ... (not shown)
   
   bgWorker.start();
 }

 

(三)通过第三方类库,通过一个类来得到一个worker
需要用到两个第三方类库,分别是:
https://github.com/bortsen/worker-from-class
https://github.com/claus/as3swf

具体思路是,通过一个写有子线程的类 来获得其生成为swf文件的ByteArray。这样就得到了swf的字节流。

代码是根据http://esdot.ca/examples/HelloWorldWorker.as改写的
很简单很短

下面我直接上第三种的项目文件,两个第三方类库也包含在其中了。

 

备注:本文纯属个人理解,如果有什么地方阐述的不对,还请各位大侠指出。谢谢~

分享到:
评论

相关推荐

    官方例子air与fp版 air的桌面应用里可以有多线程(转)

    标题中的“官方例子air与fp版 air的桌面应用里可以有多线程(转)”指出,这个内容主要涉及Adobe AIR技术,特别是针对桌面应用的多线程实现。Adobe AIR(Adobe Integrated Runtime)允许开发者创建跨平台的桌面应用...

    vue3中使用Web Worker多线程(TS风味版)

    用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644

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

    在"flash builder4.7 多线程worker类的使用视频3"中,很可能是继续深入讲解如何在实际项目中运用Worker类,可能涵盖上述各个步骤的细节,如创建和启动Worker,实现消息传递,以及处理异常情况等。通过观看这个视频...

    vue3中使用Web Worker多线程(JS原味版)

    用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644

    rabbitmq之helloworld和worker的例子

    在本文中,我们将深入探讨RabbitMQ的基本概念,并通过一个名为“Hello World”和“Worker”的例子,了解如何使用Java来实现RabbitMQ的生产者和消费者。RabbitMQ是一个开源的消息代理和队列服务器,它允许应用程序...

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

    在Flash Builder 4.7中,开发者首次获得了官方支持的多线程能力,这主要得益于引入了`Worker`类。这个新特性对于处理耗时计算、后台数据加载以及不阻塞用户界面的任务至关重要,极大地提升了Flex应用的性能和用户...

    C# 多线程实例多线程实例多线程实例

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...

    PB多线程实现

    PB12.5引入了对多线程的更好支持,它引入了一个名为“Worker Thread”的新概念。开发者可以创建一个工作线程对象,然后在这个对象上执行自定义的代码块。这使得在PB应用中实现多线程变得更加简单。在PB12.5中,还...

    11.Qt多线程_QT多线程_

    Qt框架中的多线程技术是开发高效、响应性应用程序的关键工具。在现代计算机系统中,多线程允许程序同时执行多个任务,提升程序性能并优化用户体验。本示例旨在教授如何在Qt环境中有效地利用多线程,特别是通过`...

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

    在Flash Builder 4.7中,Worker类是Adobe Flex提供的一种机制,用于实现应用程序的多线程处理。这个特性使得开发者能够在主线程之外执行耗时的任务,从而避免阻塞用户界面,提高应用的响应性和用户体验。本视频教程...

    C++11多线程demo

    在提供的"C++11_thread_demo"压缩包中,可能包含了几个简单的多线程示例,比如一个线程打印“Hello”而另一个线程打印“World”,或者一个线程计算斐波那契数列,另一个线程负责显示结果。这些示例可以帮助初学者...

    线程示例WorkerThread_demo

    总的来说,`WorkerThread_demo`是一个教授如何在C#中使用线程的实例,涵盖了线程的创建、管理和交互,以及如何在多线程环境中保证程序的正确性和响应性。通过分析和理解这个示例,开发者可以更好地掌握并发编程技巧...

    vs2013创建多线程教程

    VS2013 创建多线程教程 多线程编程是指在一个进程中同时运行多个线程,以提高程序的执行效率和响应速度。在 VS2013 平台中,创建多线程可以使用 CreateThread 函数或 AfxBeginThread 函数。 1. 创建线程结构体 ...

    WorkerFactory AS3多线程库

    WorkerFactory AS3 多线程库是一个专门为ActionScript 3(AS3)设计的库,它使得在Flash环境中实现多线程操作成为可能。ActionScript是Adobe Flash Player和Adobe AIR平台上的主要编程语言,通常用于创建交互式内容...

    Android WebView 之Helloworld

    "Android WebView 之Helloworld"这个主题将引导我们了解如何在Android应用中集成和使用WebView来展示一个简单的网页。 首先,我们需要理解WebView的基本概念。WebView是Android SDK中的一个类,它是Android系统提供...

    PyQt5多线程的执行和停止

    在Python的GUI编程中,PyQt5是一个广泛使用的库,它提供了丰富的功能,包括创建复杂的用户界面和处理多线程任务。本示例主要探讨如何在PyQt5中实现多线程的执行与停止,并通过进度条进行可视化展示。下面我们将深入...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)_0520.rar

    Thread thread = new Thread(() => Console.WriteLine("Hello, World!")); thread.Start(); ``` 2. **线程同步与互斥** 在多线程环境下,为了保证数据的一致性和安全性,通常需要进行线程同步。互斥是一种常见...

    qt 多线程共享全局缓冲区

    在Qt框架中,多线程(Multithreading)是一种重要的技术,它允许应用程序同时执行多个任务,提升程序的效率和响应性。特别是在处理耗时计算或者I/O操作时,多线程能显著改善用户体验。本篇文章将深入探讨如何在Qt ...

    Qt多线程TCP服务器

    **Qt多线程TCP服务器详解** 在开发网络应用程序时,多线程技术常常被用于提高服务器的并发处理能力。Qt库作为一个跨平台的C++框架,提供了丰富的功能,包括对网络编程的支持。本篇将深入讲解如何使用Qt构建一个多...

Global site tag (gtag.js) - Google Analytics