从fp11.4开始支持worker技术, 即as3中的线程概念, 到了fp11.5, flascc中开始支持pthread家族来创建线程。

  总的来说, as3中有两种创建线程的方法:

1、直接在as3中利用worker家族接口来创建和使用线程。

2、利用flascc技术在c中使用pthread家族接口来创建和使用线程。adobe官方文档明确指出, 使用pthread创建的线程, 最终也是使用as3中的worker来实现的。

  

一、worker对象的创建和获取

1、利用worker家族接口创建的worker的获取

  有三种途径, 如下:

  1.1 创建worker的时候直接获取

var worker: Worker = WorkerDomain.current.createWorker(swfBytes);

  1.2 在要获取的地方使用Worker.current获取当前代码所在的线程。

  1.3 利用WorkerDomain.current.listWorkers()来获取当前所有的worker列表。

2、利用pthread家族接口创建的worker的获取

   因为利用pthread_create创建出现的线程实际上最终也是会生成一个worker来运行的,所以也就有了对于这个worker对象的获取。但是这时候只能使用1.2和1.3的方法来获取, 而没办法直接使用1.1可以放线程创建者来获取当前创建的worker。 因为这个原因, 或许会给使用者带来不便。

二、worker之间的通讯

1、worker之间的消息传递

  消息传递只有一种方式, 通过MessageChannel对象。

2、worker之间的数据传递

  数据传递有两种方式。

  1  通过worker本身, 设置其共享属性, 即setSharedProperty。

  2  通过MessageChannel, 通过send和receive进行发送和接收。需要注意的是, 使用MessageChannel发送数据时有可能出现如下的错误:

      1、

    MessageChannel关闭的问题。

    worker A创建一个连接worker B的通道channel, A和B有任何一方没有持有这个channel,即使channel已经被设置为shared property, 这个channel也是一个local var, 随时可能被close。

    Worker状态变为running和Worker对应的Sprite对象的构造时机问题。

    Worker状态变为running的时机要早于Worker对应的Sprite对象的构造。

  两种传递方式能够传递的对象是一致的, 分两类:

  1  按值传递, 可以传递被AMF3序列化的对象。

  2  按引用传递, 目前只有五个对象,即ByteArray(shared)、MessageChannel、Worker、Mutex、Condition。

  需要注意的是, 如果要传递一个自定义对象, 这个自定义对象也是按值传递的, 但是自定义对象里不能包含上述五种按引用传递的对象作为其属性, 否则会报类似如如下的错误:

  Object无法转换为xx对象。

  有一个解决方案可以传递自定义对象, 对象里面包含按值传递的属性和按引用传递的属性:

  先在worker里设置其共享属性, 然后通过MessageChannel传递该worker给另外一个worker, 组后在另外一个worker的代码里通过被传递的worker组建出自定义对象。代码如下:

三、关于pthread和worker的关系

  1、thread proc函数的运行和worker的载入(构造函数, added to stage事件)先后顺序关系。

  2、如果一个thread proc是一个死循环函数, 那么worker本身能否处理自身事件,比如enter frame等。

   3、关于pthread与普通worker之间的性能、内存使用的测试对比。

as3中的多线程的更多相关文章

  1. 细说.NET 中的多线程 (一 概念)

    为什么使用多线程 使用户界面能够随时相应用户输入 当某个应用程序在进行大量运算时候,为了保证应用程序能够随时相应客户的输入,这个时候我们往往需要让大量运算和相应用户输入这两个行为在不同的线程中进行. ...

  2. 细说.NET中的多线程 (二 线程池)

    上一章我们了解到,由于线程的创建,销毁都是需要耗费大量资源和时间的,开发者应该非常节约的使用线程资源.最好的办法是使用线程池,线程池能够避免当前进行中大量的线程导致操作系统不停的进行线程切换,当线程数 ...

  3. [转载]ArcGIS Engine 中的多线程使用

    ArcGIS Engine 中的多线程使用 原文链接 http://anshien.blog.163.com/blog/static/169966308201082441114173/   一直都想写 ...

  4. python中的多线程【转】

    转载自: http://c4fun.cn/blog/2014/05/06/python-threading/ python中关于多线程的操作可以使用thread和threading模块来实现,其中th ...

  5. 拒绝卡顿——在WPF中使用多线程更新UI

    原文:拒绝卡顿--在WPF中使用多线程更新UI 有经验的程序员们都知道:不能在UI线程上进行耗时操作,那样会造成界面卡顿,如下就是一个简单的示例: public partial class MainW ...

  6. java中的多线程——进度2

    package src;/*多线程总结:1,进程和线程的概念.    |--进程:    |--线程:2,jvm中的多线程体现.    |--主线程,垃圾回收线程,自定义线程.以及他们运行的代码的位置 ...

  7. Qt中的多线程编程

    http://www.ibm.com/developerworks/cn/linux/l-qt-mthrd/ Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功 ...

  8. 转:MFC中创建多线程

    MFC中创建多线程   MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问类的其他成员 ...

  9. C#中的多线程-入门

    概述与概念C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行.一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多 ...

随机推荐

  1. Python 2.7.9 Demo - ini文件的读、写

    ini文件 [weixin_info] hello = Nick Huang #coding=utf-8 #!/usr/bin/python import ConfigParser; cp = Con ...

  2. 如何使用同一个Action中的不同方法

    如何使用同一个Action中的不同方法 1.使用Action的DMI(Dynamic Method Invocation--动态方法调用) (1)动态方法调用: 表单元素的action不是直接为某个A ...

  3. 解决点击状态栏时ScrollView自动滚动到初始位置失效办法

    http://www.cocoachina.com/ios/20150807/12949.html 取消点击状态栏scrollView会自动滚动到初始位置的功能 _scrollView.scrolls ...

  4. 电量检测芯片BQ27510使用心得

    最近接触到一款TI的电量检测芯片BQ27510,网上很少有人提及该芯片如何使用,大部分博文都是搬得BQ27510的datasheet,至于真正使用过的很少,该芯片我个人感觉还是非常强大的,能自动学习你 ...

  5. 重定向redirect与跳转forward区别

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoResponse.a ...

  6. LuaTinker的bug和缺陷

    LuaTinker的bug和缺陷 LuaTinker是一套还不错的C++代码和Lua代码的绑定库,作者是韩国人Kwon-il Lee,作者应该是参考了LuaBind后,为了简化和避免过重而实现的.其官 ...

  7. Dreamweaver学习笔记---2016.08.17

    静态网页:不访问数据库,直接写入HTML. 动态网页:在网上发布好的,我们可以通过网页预览到的,具有访问数据库的过程. HTML:Hyper Text Markup Language,超文本语音标记. ...

  8. Beaglebone Black–GPIO 高低电平控制 LED 灯

    上一篇,运用 Linux 的 sysfs,控制本机上的 LED 灯,usr0 至 usr3,这次用 GPIO 控制外部的电路,点亮 LED 灯. 这次的全部材料: BBB 一台 购买 BBB 自带的 ...

  9. [SAP ABAP开发技术总结]几个小问题

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. C# 十进制与十六进制互转

    1.从十六进制转换为十进制 /// <summary> /// 十六进制转换到十进制 /// </summary> /// <param name="hex&q ...