关于多线程的例子和教程各位大侠已经发过很多了。但是大多数都是针对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的桌面应用里可以有多线程(转)”指出,这个内容主要涉及Adobe AIR技术,特别是针对桌面应用的多线程实现。Adobe AIR(Adobe Integrated Runtime)允许开发者创建跨平台的桌面应用...
用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644
在"flash builder4.7 多线程worker类的使用视频3"中,很可能是继续深入讲解如何在实际项目中运用Worker类,可能涵盖上述各个步骤的细节,如创建和启动Worker,实现消息传递,以及处理异常情况等。通过观看这个视频...
用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644
在本文中,我们将深入探讨RabbitMQ的基本概念,并通过一个名为“Hello World”和“Worker”的例子,了解如何使用Java来实现RabbitMQ的生产者和消费者。RabbitMQ是一个开源的消息代理和队列服务器,它允许应用程序...
在Flash Builder 4.7中,开发者首次获得了官方支持的多线程能力,这主要得益于引入了`Worker`类。这个新特性对于处理耗时计算、后台数据加载以及不阻塞用户界面的任务至关重要,极大地提升了Flex应用的性能和用户...
在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...
PB12.5引入了对多线程的更好支持,它引入了一个名为“Worker Thread”的新概念。开发者可以创建一个工作线程对象,然后在这个对象上执行自定义的代码块。这使得在PB应用中实现多线程变得更加简单。在PB12.5中,还...
Qt框架中的多线程技术是开发高效、响应性应用程序的关键工具。在现代计算机系统中,多线程允许程序同时执行多个任务,提升程序性能并优化用户体验。本示例旨在教授如何在Qt环境中有效地利用多线程,特别是通过`...
在Flash Builder 4.7中,Worker类是Adobe Flex提供的一种机制,用于实现应用程序的多线程处理。这个特性使得开发者能够在主线程之外执行耗时的任务,从而避免阻塞用户界面,提高应用的响应性和用户体验。本视频教程...
在提供的"C++11_thread_demo"压缩包中,可能包含了几个简单的多线程示例,比如一个线程打印“Hello”而另一个线程打印“World”,或者一个线程计算斐波那契数列,另一个线程负责显示结果。这些示例可以帮助初学者...
总的来说,`WorkerThread_demo`是一个教授如何在C#中使用线程的实例,涵盖了线程的创建、管理和交互,以及如何在多线程环境中保证程序的正确性和响应性。通过分析和理解这个示例,开发者可以更好地掌握并发编程技巧...
VS2013 创建多线程教程 多线程编程是指在一个进程中同时运行多个线程,以提高程序的执行效率和响应速度。在 VS2013 平台中,创建多线程可以使用 CreateThread 函数或 AfxBeginThread 函数。 1. 创建线程结构体 ...
WorkerFactory AS3 多线程库是一个专门为ActionScript 3(AS3)设计的库,它使得在Flash环境中实现多线程操作成为可能。ActionScript是Adobe Flash Player和Adobe AIR平台上的主要编程语言,通常用于创建交互式内容...
"Android WebView 之Helloworld"这个主题将引导我们了解如何在Android应用中集成和使用WebView来展示一个简单的网页。 首先,我们需要理解WebView的基本概念。WebView是Android SDK中的一个类,它是Android系统提供...
在Python的GUI编程中,PyQt5是一个广泛使用的库,它提供了丰富的功能,包括创建复杂的用户界面和处理多线程任务。本示例主要探讨如何在PyQt5中实现多线程的执行与停止,并通过进度条进行可视化展示。下面我们将深入...
Thread thread = new Thread(() => Console.WriteLine("Hello, World!")); thread.Start(); ``` 2. **线程同步与互斥** 在多线程环境下,为了保证数据的一致性和安全性,通常需要进行线程同步。互斥是一种常见...
在Qt框架中,多线程(Multithreading)是一种重要的技术,它允许应用程序同时执行多个任务,提升程序的效率和响应性。特别是在处理耗时计算或者I/O操作时,多线程能显著改善用户体验。本篇文章将深入探讨如何在Qt ...
**Qt多线程TCP服务器详解** 在开发网络应用程序时,多线程技术常常被用于提高服务器的并发处理能力。Qt库作为一个跨平台的C++框架,提供了丰富的功能,包括对网络编程的支持。本篇将深入讲解如何使用Qt构建一个多...