开源项目async-threading能使as3支持多线程,google code地址:http://code.google.com/p/async-threading/
要在flex4 sdk环境下使用,要先修改一下源代码,打开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;
同时导入import mx.core.FlexGlobals;
这个api要求自定义的线程继承AbstractAsyncThread然后实现IAsyncThreadResponder接口,写一个测试用线程:
package thread
{
import com.symantec.premiumServices.asyncThreading.abstract.AbstractAsyncThread;
import com.symantec.premiumServices.asyncThreading.interfaces.IAsyncThreadResponder;
/**
* 自定义线程
*/
public class SelfDefinedThread extends AbstractAsyncThread implements IAsyncThreadResponder
{
private var f:Function;
public function SelfDefinedThread(f:Function)
{
super();
this.f = f;
}
public function execute():void
{
f.call();
}
}
}
这个api还是比较强大的,基本线程操作和通讯都能实现了,具体可以看附件内的源代码api。
这个线程的构造函数要传入一个方法,这个方法将在线程启动后调用。
测试代码:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="testThread()">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import thread.SelfDefinedThread;
private function testThread():void{
//线程1
var thread1:SelfDefinedThread = new SelfDefinedThread(
function():void{
trace("线程1执行");
trace("开启线程2");
thread2.start();
});
//线程2
var thread2:SelfDefinedThread = new SelfDefinedThread(
function():void{
trace("线程2执行");
if(thread1.sleeping)
{
thread1.kill();
thread2.kill();
thread3.kill();
trace("线程1,2,3终止");
}else{
trace("开启一个线程3");
thread3.start();
}
});
//线程3
var thread3:SelfDefinedThread = new SelfDefinedThread(
function():void{
trace(thread3.id + "线程3执行");
if(!thread1.sleeping)
{
thread1.sleep();
trace("线程1休眠");
}
});
thread1.priority = thread1.RUN_LEVEL_HIGH;
thread2.priority = thread2.RUN_LEVEL_BELOW_NORMAL;
thread1.start();
}
]]>
</fx:Script>
<s:Label x="281" y="122" text="多线程测试"/>
</s:WindowedApplication>
用调试模式执行就能看到结果:
分享到:
相关推荐
"async-threading 让flex支持多线程"这个标题表明我们正在讨论如何在Adobe Flex环境中实现异步多线程处理。Flex是一种基于ActionScript的开放源码框架,常用于构建富互联网应用程序(RIA)。在Flex中,由于其默认的...
Microsoft.VisualStudio.Threading 分析仪: 产品特点 许多线程同步原语的异步版本 AsyncAutoResetEvent AsyncBarrier AsyncCountdownEvent AsyncManualResetEvent AsyncReaderWriterLock AsyncSemaphore ...
同时,还会介绍异步编程模型,如`async/await`关键字,它们提供了更简洁、更易于管理的并发方式。 其次,书中会涉及线程同步和互斥,这是避免竞态条件和死锁的关键。`Monitor`, `Mutex`, `Semaphore`和`...
本文将深入探讨 WatchKit 中的线程工作,通过一个名为 "WatchKit-Threading" 的简单演示应用程序,我们能够直观地了解这一主题。 线程在 WatchKit 中的作用主要是为了实现后台任务和异步操作,避免阻塞主线程,确保...
【标题】"bootcamp-threading:Projeto基地"是一个与多线程相关的训练项目,它主要探讨了在非Android环境中如何有效地使用线程技术。在这个项目中,开发者可能旨在通过Kotlin语言,来实践和理解线程管理的重要性以及...
public async Task<HttpResponseMessage> Upload() { if (!Request.Content.IsMimeMultipartContent()) throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); var provider = await ...
- **Task类介绍**:`System.Threading.Tasks.Task`是.NET Framework提供的一个强大类,用于封装异步操作。它提供了丰富的API来管理和协调异步任务。 #### 四、C# 5.0中的`async`和`await` - **`async`关键字**:...
using System.Threading.Tasks; class AsyncAwaitExample { static async Task Main() { Console.WriteLine("开始执行"); // 异步调用,模拟耗时操作 var result = await LongRunningOperation(); ...
协程的调度完全由用户控制,与传统的操作系统线程(如Python的threading模块)相比,协程的创建和切换的开销要小得多。在Python中,协程的演化过程经历了从生成器(Generator)到增强型生成器(Enhanced Generators...
using System.Threading.Tasks; public async Task<string> GetRemoteDataAsync(string url) { using (var client = new HttpClient()) { try { HttpResponseMessage response = await client.GetAsync(url); ...
1. 创建线程:可以通过`System.Threading.Thread`类创建新线程,或者使用`ThreadPool`线程池来创建和管理线程。 2. 线程同步:为了避免线程间的竞态条件和数据不一致,可以使用锁(如`Monitor`,`Mutex`,`Semaphore...
6. **异步编程**:C#的异步编程模型基于async/await关键词,允许开发者编写非阻塞代码,提高UI的响应性。异步操作通常通过异步方法返回一个Task,当Task完成时,await表达式会恢复执行。 7. **线程优先级**:每个...
5. **Threading工具**:库中可能包含了线程相关的辅助类,比如线程池管理、线程安全的数据结构等,帮助开发者更好地管理和同步多线程操作。 6. **Event-Based Asynchronous Pattern (EAP)** 和 **Async Programming...
在编程领域,多线程(Multi-Threading)是一种强大的技术,允许程序同时执行多个任务,以提高效率和响应性。在“sample console multithreading”这个项目中,我们将深入探讨如何利用多线程在控制台应用程序...
Python中的`threading`模块是实现多线程编程的关键,它提供了一种方式来执行并发任务,从而提高程序的效率。本文将详细讲解如何在Python中开启和关闭线程,以及如何实现线程的控制。 ### 一、开启线程 开启线程的...
- **异步方法**: 通过使用异步关键字`async`来简化异步编程。 - **异步事件**: 用于异步地通知事件的发生。 - **计时器(Timers)**: 用于定期执行任务。 - **本地存储(LocalStorage)**: 存储特定于线程的数据。 ####...
"gevent, threads & async frameworks"这个主题涵盖了三个主要概念:gevent、多线程以及异步框架。以下是对这些概念的详细解释: 1. **Gevent**: Gevent是一个基于Python的库,用于实现协程(coroutines)和事件...
- **异步委托**:通过使用`Task`和`async/await`关键字,可以在不显式管理线程的情况下编写异步代码。 - **计时器**:`System.Timers.Timer`或`System.Threading.Timer`类可以用来执行定期的任务。 - **局部存储**:...
C# async 和 await 的具体用法 C# 5.0 中引入了 async 和 await 两个关键字,这两个关键字可以让开发者更方便地编写异步代码。async 和 await 的出现使得异步编程变得更加简单易懂。 async 关键字 async 关键字...