async-threading 让flex支持多线程

开源项目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支持多线程

 

 

你可能感兴趣的:(reading)