Справочник по ActionScript® 3.0 для платформы Adobe® Flash®
Домашняя страница  |  Скрыть список пакетов и классов |  Пакеты  |  Классы  |  Что нового  |  Указатель  |  Приложения  |  Почему по-английски?
Фильтры: AIR 30.0 или более ранней версии, Flash Player 30.0 или более ранней версии, Flash Lite 4
Flex 4.6 или более ранней версии, Flash Pro CS6 или более ранней версии
Скрыть фильтры
flash.system 

Worker  - AS3

Пакетыx

Верхний уровень
adobe.utils
air.desktop
air.net
air.update
air.update.events
coldfusion.air
coldfusion.air.errors
coldfusion.air.events
coldfusion.service
coldfusion.service.events
coldfusion.service.mxml
com.adobe.acm.solutions.authoring.domain.extensions
com.adobe.acm.solutions.ccr.domain.extensions
com.adobe.consulting.pst.vo
com.adobe.dct.component
com.adobe.dct.component.datadictionary
com.adobe.dct.component.datadictionaryElement
com.adobe.dct.component.dataElementsPanel
com.adobe.dct.component.toolbars
com.adobe.dct.event
com.adobe.dct.exp
com.adobe.dct.model
com.adobe.dct.service
com.adobe.dct.service.provider
com.adobe.dct.transfer
com.adobe.dct.util
com.adobe.dct.view
com.adobe.ep.taskmanagement.domain
com.adobe.ep.taskmanagement.event
com.adobe.ep.taskmanagement.filter
com.adobe.ep.taskmanagement.services
com.adobe.ep.taskmanagement.util
com.adobe.ep.ux.attachmentlist.component
com.adobe.ep.ux.attachmentlist.domain
com.adobe.ep.ux.attachmentlist.domain.events
com.adobe.ep.ux.attachmentlist.domain.renderers
com.adobe.ep.ux.attachmentlist.skin
com.adobe.ep.ux.attachmentlist.skin.renderers
com.adobe.ep.ux.content.event
com.adobe.ep.ux.content.factory
com.adobe.ep.ux.content.handlers
com.adobe.ep.ux.content.managers
com.adobe.ep.ux.content.model.asset
com.adobe.ep.ux.content.model.preview
com.adobe.ep.ux.content.model.relation
com.adobe.ep.ux.content.model.search
com.adobe.ep.ux.content.model.toolbar
com.adobe.ep.ux.content.search
com.adobe.ep.ux.content.services
com.adobe.ep.ux.content.services.load
com.adobe.ep.ux.content.services.permissions
com.adobe.ep.ux.content.services.preview
com.adobe.ep.ux.content.services.providers
com.adobe.ep.ux.content.services.query
com.adobe.ep.ux.content.services.relationships
com.adobe.ep.ux.content.services.search.lccontent
com.adobe.ep.ux.content.services.version
com.adobe.ep.ux.content.view
com.adobe.ep.ux.content.view.components.activate
com.adobe.ep.ux.content.view.components.grid
com.adobe.ep.ux.content.view.components.grid.hover
com.adobe.ep.ux.content.view.components.grid.hover.component
com.adobe.ep.ux.content.view.components.grid.renderers
com.adobe.ep.ux.content.view.components.relationships
com.adobe.ep.ux.content.view.components.review
com.adobe.ep.ux.content.view.components.search.renderers
com.adobe.ep.ux.content.view.components.searchpod
com.adobe.ep.ux.content.view.components.toolbar
com.adobe.ep.ux.content.view.components.toolbar.controlRenderers
com.adobe.ep.ux.content.view.components.version
com.adobe.ep.ux.documentsubmit.component
com.adobe.ep.ux.documentsubmit.domain
com.adobe.ep.ux.documentsubmit.skin
com.adobe.ep.ux.taskaction.component
com.adobe.ep.ux.taskaction.domain
com.adobe.ep.ux.taskaction.domain.events
com.adobe.ep.ux.taskaction.skin
com.adobe.ep.ux.taskdetails.component
com.adobe.ep.ux.taskdetails.domain
com.adobe.ep.ux.taskdetails.skin
com.adobe.ep.ux.tasklist.component
com.adobe.ep.ux.tasklist.domain
com.adobe.ep.ux.tasklist.skin
com.adobe.ep.ux.webdocumentviewer.domain
com.adobe.exm.expression
com.adobe.exm.expression.error
com.adobe.exm.expression.event
com.adobe.exm.expression.impl
com.adobe.fiber.runtime.lib
com.adobe.fiber.services
com.adobe.fiber.services.wrapper
com.adobe.fiber.styles
com.adobe.fiber.util
com.adobe.fiber.valueobjects
com.adobe.gravity.binding
com.adobe.gravity.context
com.adobe.gravity.flex.bundleloader
com.adobe.gravity.flex.progress
com.adobe.gravity.flex.serviceloader
com.adobe.gravity.framework
com.adobe.gravity.init
com.adobe.gravity.service.bundleloader
com.adobe.gravity.service.logging
com.adobe.gravity.service.manifest
com.adobe.gravity.service.progress
com.adobe.gravity.tracker
com.adobe.gravity.ui
com.adobe.gravity.utility
com.adobe.gravity.utility.async
com.adobe.gravity.utility.error
com.adobe.gravity.utility.events
com.adobe.gravity.utility.factory
com.adobe.gravity.utility.flex.async
com.adobe.gravity.utility.logging
com.adobe.gravity.utility.message
com.adobe.gravity.utility.sequence
com.adobe.gravity.utility.url
com.adobe.guides.control
com.adobe.guides.domain
com.adobe.guides.i18n
com.adobe.guides.spark.components.skins
com.adobe.guides.spark.components.skins.mx
com.adobe.guides.spark.headers.components
com.adobe.guides.spark.headers.skins
com.adobe.guides.spark.layouts.components
com.adobe.guides.spark.layouts.skins
com.adobe.guides.spark.navigators.components
com.adobe.guides.spark.navigators.renderers
com.adobe.guides.spark.navigators.skins
com.adobe.guides.spark.util
com.adobe.guides.spark.wrappers.components
com.adobe.guides.spark.wrappers.skins
com.adobe.guides.submit
com.adobe.icc.dc.domain
com.adobe.icc.dc.domain.factory
com.adobe.icc.editors.events
com.adobe.icc.editors.handlers
com.adobe.icc.editors.managers
com.adobe.icc.editors.model
com.adobe.icc.editors.model.config
com.adobe.icc.editors.model.el
com.adobe.icc.editors.model.el.operands
com.adobe.icc.editors.model.el.operators
com.adobe.icc.enum
com.adobe.icc.external.dc
com.adobe.icc.obj
com.adobe.icc.services
com.adobe.icc.services.category
com.adobe.icc.services.config
com.adobe.icc.services.download
com.adobe.icc.services.export
com.adobe.icc.services.external
com.adobe.icc.services.formbridge
com.adobe.icc.services.fragmentlayout
com.adobe.icc.services.layout
com.adobe.icc.services.letter
com.adobe.icc.services.locator
com.adobe.icc.services.module
com.adobe.icc.services.render
com.adobe.icc.services.submit
com.adobe.icc.services.user
com.adobe.icc.token
com.adobe.icc.vo
com.adobe.icc.vo.render
com.adobe.icomm.assetplacement.controller
com.adobe.icomm.assetplacement.controller.utils
com.adobe.icomm.assetplacement.data
com.adobe.icomm.assetplacement.model
com.adobe.livecycle.assetmanager.client
com.adobe.livecycle.assetmanager.client.event
com.adobe.livecycle.assetmanager.client.handler
com.adobe.livecycle.assetmanager.client.managers
com.adobe.livecycle.assetmanager.client.model
com.adobe.livecycle.assetmanager.client.model.cms
com.adobe.livecycle.assetmanager.client.service
com.adobe.livecycle.assetmanager.client.service.search
com.adobe.livecycle.assetmanager.client.service.search.cms
com.adobe.livecycle.assetmanager.client.utils
com.adobe.livecycle.content
com.adobe.livecycle.rca.model
com.adobe.livecycle.rca.model.constant
com.adobe.livecycle.rca.model.document
com.adobe.livecycle.rca.model.participant
com.adobe.livecycle.rca.model.reminder
com.adobe.livecycle.rca.model.stage
com.adobe.livecycle.rca.service
com.adobe.livecycle.rca.service.core
com.adobe.livecycle.rca.service.core.delegate
com.adobe.livecycle.rca.service.process
com.adobe.livecycle.rca.service.process.delegate
com.adobe.livecycle.rca.token
com.adobe.livecycle.ria.security.api
com.adobe.livecycle.ria.security.service
com.adobe.mosaic.layouts
com.adobe.mosaic.layouts.dragAndDrop
com.adobe.mosaic.layouts.interfaces
com.adobe.mosaic.mxml
com.adobe.mosaic.om.constants
com.adobe.mosaic.om.events
com.adobe.mosaic.om.impl
com.adobe.mosaic.om.interfaces
com.adobe.mosaic.skinning
com.adobe.mosaic.sparklib.editors
com.adobe.mosaic.sparklib.optionMenu
com.adobe.mosaic.sparklib.scrollableMenu
com.adobe.mosaic.sparklib.scrollableMenu.skins
com.adobe.mosaic.sparklib.tabLayout
com.adobe.mosaic.sparklib.tabLayout.events
com.adobe.mosaic.sparklib.tabLayout.layouts
com.adobe.mosaic.sparklib.tabLayout.skins
com.adobe.mosaic.sparklib.text
com.adobe.mosaic.sparklib.util
com.adobe.solutions.acm.authoring.presentation
com.adobe.solutions.acm.authoring.presentation.actionbar
com.adobe.solutions.acm.authoring.presentation.common
com.adobe.solutions.acm.authoring.presentation.events
com.adobe.solutions.acm.authoring.presentation.fragment
com.adobe.solutions.acm.authoring.presentation.letter
com.adobe.solutions.acm.authoring.presentation.letter.data
com.adobe.solutions.acm.authoring.presentation.preview
com.adobe.solutions.acm.authoring.presentation.rte
com.adobe.solutions.acm.ccr.presentation
com.adobe.solutions.acm.ccr.presentation.contentcapture
com.adobe.solutions.acm.ccr.presentation.contentcapture.events
com.adobe.solutions.acm.ccr.presentation.contentcapture.preview
com.adobe.solutions.acm.ccr.presentation.datacapture
com.adobe.solutions.acm.ccr.presentation.datacapture.renderers
com.adobe.solutions.acm.ccr.presentation.pdf
com.adobe.solutions.exm
com.adobe.solutions.exm.authoring
com.adobe.solutions.exm.authoring.components.controls
com.adobe.solutions.exm.authoring.components.toolbars
com.adobe.solutions.exm.authoring.domain
com.adobe.solutions.exm.authoring.domain.expression
com.adobe.solutions.exm.authoring.domain.impl
com.adobe.solutions.exm.authoring.domain.method
com.adobe.solutions.exm.authoring.domain.variable
com.adobe.solutions.exm.authoring.enum
com.adobe.solutions.exm.authoring.events
com.adobe.solutions.exm.authoring.model
com.adobe.solutions.exm.authoring.renderer
com.adobe.solutions.exm.authoring.view
com.adobe.solutions.exm.expression
com.adobe.solutions.exm.impl
com.adobe.solutions.exm.impl.method
com.adobe.solutions.exm.method
com.adobe.solutions.exm.mock
com.adobe.solutions.exm.mock.method
com.adobe.solutions.exm.runtime
com.adobe.solutions.exm.runtime.impl
com.adobe.solutions.exm.variable
com.adobe.solutions.prm.constant
com.adobe.solutions.prm.domain
com.adobe.solutions.prm.domain.factory
com.adobe.solutions.prm.domain.impl
com.adobe.solutions.prm.domain.manager
com.adobe.solutions.prm.presentation.asset
com.adobe.solutions.prm.presentation.constant
com.adobe.solutions.prm.presentation.document
com.adobe.solutions.prm.presentation.event
com.adobe.solutions.prm.presentation.file
com.adobe.solutions.prm.presentation.project
com.adobe.solutions.prm.presentation.team
com.adobe.solutions.prm.presentation.util
com.adobe.solutions.prm.service
com.adobe.solutions.prm.services.impl
com.adobe.solutions.prm.vo
com.adobe.solutions.rca.constant
com.adobe.solutions.rca.domain
com.adobe.solutions.rca.domain.common
com.adobe.solutions.rca.domain.factory
com.adobe.solutions.rca.domain.impl
com.adobe.solutions.rca.domain.impl.manager
com.adobe.solutions.rca.domain.manager
com.adobe.solutions.rca.presentation
com.adobe.solutions.rca.presentation.comment
com.adobe.solutions.rca.presentation.constant
com.adobe.solutions.rca.presentation.event
com.adobe.solutions.rca.presentation.gantt
com.adobe.solutions.rca.presentation.gantt.ruler
com.adobe.solutions.rca.presentation.template
com.adobe.solutions.rca.presentation.template.audit
com.adobe.solutions.rca.presentation.template.definition
com.adobe.solutions.rca.presentation.template.documents
com.adobe.solutions.rca.presentation.template.stages
com.adobe.solutions.rca.presentation.util
com.adobe.solutions.rca.service
com.adobe.solutions.rca.services.impl
com.adobe.solutions.rca.vo
com.adobe.solutions.rca.vo.um
com.adobe.viewsource
fl.accessibility
fl.containers
fl.controls
fl.controls.dataGridClasses
fl.controls.listClasses
fl.controls.progressBarClasses
fl.core
fl.data
fl.display
fl.events
fl.ik
fl.lang
fl.livepreview
fl.managers
fl.motion
fl.motion.easing
fl.rsl
fl.text
fl.transitions
fl.transitions.easing
fl.video
flash.accessibility
flash.concurrent
flash.crypto
flash.data
flash.desktop
flash.display
flash.display3D
flash.display3D.textures
flash.errors
flash.events
flash.external
flash.filesystem
flash.filters
flash.geom
flash.globalization
flash.html
flash.media
flash.net
flash.net.dns
flash.net.drm
flash.notifications
flash.permissions
flash.printing
flash.profiler
flash.sampler
flash.security
flash.sensors
flash.system
flash.text
flash.text.engine
flash.text.ime
flash.ui
flash.utils
flash.xml
flashx.textLayout
flashx.textLayout.compose
flashx.textLayout.container
flashx.textLayout.conversion
flashx.textLayout.edit
flashx.textLayout.elements
flashx.textLayout.events
flashx.textLayout.factory
flashx.textLayout.formats
flashx.textLayout.operations
flashx.textLayout.utils
flashx.undo
ga.controls
ga.layouts
ga.model
ga.uiComponents
ga.util
ga.views
ga.wrappers
lc.foundation
lc.foundation.domain
lc.foundation.events
lc.foundation.ui
lc.foundation.util
lc.preloader
lc.procmgmt
lc.procmgmt.commands
lc.procmgmt.domain
lc.procmgmt.events
lc.procmgmt.formbridge
lc.procmgmt.impl
lc.procmgmt.ui.attachments
lc.procmgmt.ui.controls
lc.procmgmt.ui.controls.card
lc.procmgmt.ui.controls.renderer
lc.procmgmt.ui.help
lc.procmgmt.ui.layout
lc.procmgmt.ui.presentationmodel
lc.procmgmt.ui.process
lc.procmgmt.ui.search
lc.procmgmt.ui.startpoint
lc.procmgmt.ui.task
lc.procmgmt.ui.task.form
lc.procmgmt.ui.task.form.commands
lc.procmgmt.ui.tracking
mx.accessibility
mx.automation
mx.automation.air
mx.automation.delegates
mx.automation.delegates.advancedDataGrid
mx.automation.delegates.charts
mx.automation.delegates.containers
mx.automation.delegates.controls
mx.automation.delegates.controls.dataGridClasses
mx.automation.delegates.controls.fileSystemClasses
mx.automation.delegates.core
mx.automation.delegates.flashflexkit
mx.automation.events
mx.binding
mx.binding.utils
mx.charts
mx.charts.chartClasses
mx.charts.effects
mx.charts.effects.effectClasses
mx.charts.events
mx.charts.renderers
mx.charts.series
mx.charts.series.items
mx.charts.series.renderData
mx.charts.styles
mx.collections
mx.collections.errors
mx.containers
mx.containers.accordionClasses
mx.containers.dividedBoxClasses
mx.containers.errors
mx.containers.utilityClasses
mx.controls
mx.controls.advancedDataGridClasses
mx.controls.dataGridClasses
mx.controls.listClasses
mx.controls.menuClasses
mx.controls.olapDataGridClasses
mx.controls.scrollClasses
mx.controls.sliderClasses
mx.controls.textClasses
mx.controls.treeClasses
mx.controls.videoClasses
mx.core
mx.core.windowClasses
mx.data
mx.data.crypto
mx.data.errors
mx.data.events
mx.data.messages
mx.data.mxml
mx.data.offline.errors
mx.data.utils
mx.effects
mx.effects.easing
mx.effects.effectClasses
mx.events
mx.filters
mx.flash
mx.formatters
mx.geom
mx.graphics
mx.graphics.codec
mx.graphics.shaderClasses
mx.logging
mx.logging.errors
mx.logging.targets
mx.managers
mx.messaging
mx.messaging.channels
mx.messaging.config
mx.messaging.errors
mx.messaging.events
mx.messaging.management
mx.messaging.messages
mx.modules
mx.netmon
mx.olap
mx.olap.aggregators
mx.preloaders
mx.printing
mx.resources
mx.rpc
mx.rpc.events
mx.rpc.http
mx.rpc.http.mxml
mx.rpc.livecycle
mx.rpc.mxml
mx.rpc.remoting
mx.rpc.remoting.mxml
mx.rpc.soap
mx.rpc.soap.mxml
mx.rpc.wsdl
mx.rpc.xml
mx.skins
mx.skins.halo
mx.skins.spark
mx.skins.wireframe
mx.skins.wireframe.windowChrome
mx.states
mx.styles
mx.utils
mx.validators
org.osmf.containers
org.osmf.display
org.osmf.elements
org.osmf.events
org.osmf.layout
org.osmf.logging
org.osmf.media
org.osmf.metadata
org.osmf.net
org.osmf.net.dvr
org.osmf.net.httpstreaming
org.osmf.net.metrics
org.osmf.net.qos
org.osmf.net.rtmpstreaming
org.osmf.net.rules
org.osmf.traits
org.osmf.utils
spark.accessibility
spark.automation.delegates
spark.automation.delegates.components
spark.automation.delegates.components.gridClasses
spark.automation.delegates.components.mediaClasses
spark.automation.delegates.components.supportClasses
spark.automation.delegates.skins.spark
spark.automation.events
spark.collections
spark.components
spark.components.calendarClasses
spark.components.gridClasses
spark.components.mediaClasses
spark.components.supportClasses
spark.components.windowClasses
spark.core
spark.effects
spark.effects.animation
spark.effects.easing
spark.effects.interpolation
spark.effects.supportClasses
spark.events
spark.filters
spark.formatters
spark.formatters.supportClasses
spark.globalization
spark.globalization.supportClasses
spark.layouts
spark.layouts.supportClasses
spark.managers
spark.modules
spark.preloaders
spark.primitives
spark.primitives.supportClasses
spark.skins
spark.skins.mobile
spark.skins.mobile.supportClasses
spark.skins.spark
spark.skins.spark.mediaClasses.fullScreen
spark.skins.spark.mediaClasses.normal
spark.skins.spark.windowChrome
spark.skins.wireframe
spark.skins.wireframe.mediaClasses
spark.skins.wireframe.mediaClasses.fullScreen
spark.transitions
spark.utils
spark.validators
spark.validators.supportClasses
xd.core.axm.enterprise.view.components
xd.core.axm.enterprise.view.skins
xd.core.axm.view.components
xd.core.axm.view.components.support

Элементы языка

Глобальные константы
Глобальные функции
Операторы
Инструкции, ключевые слова и директивы
Специальные типы

Приложения

Новые возможности
Ошибки компилятора
Предупреждения компилятора
Ошибки времени выполнения
Миграция ActionScript 3
Поддерживаемые наборы символов
Только MXML
Элементы движения XML
Теги Timed Text
устаревший_индекс
Константы реализации специальных возможностей
Использование примеров
Юридическая информация
Пакетflash.system
Классpublic final class Worker
НаследованиеWorker Inheritance EventDispatcher Inheritance Object

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Объект Worker представляет объект worker, являющийся виртуальным экземпляром исполнительной среды Flash. Каждый экземпляр Worker управляет жизненным циклом и общими данными отдельного объекта worker и предоставляет доступ к ним.

Объект worker позволяет выполнять код в фоновом режиме параллельно с операциями, выполняющимися в другом объекте worker (включая основной объект worker SWF-файла). В контексте однопоточного выполнения некоторые операции, например обработка большого количества данных в цикле, могут занимать настолько большое время, что основной поток может не справляться с задачей обновления экрана. Это может вызывать дефекты отрисовки и «замораживание» изображения.

Использование объекта worker позволяет выполнять долгосрочные или медленные операции в фоновом режиме. Код каждого объекта worker выполняется в отдельном потоке. Если код одного из объектов worker требует длительного выполнения, это не блокирует выполнение кода других объектов worker. Вместо этого два потока кода выполняются параллельно. Как следствие, объект worker может использоваться для выполнения кода в фоне, позволяя основному потоку приложения обновлять изображение на экране.

Возможность одновременного выполнения различных цепочек кода известна под названием параллелизма.

Примечание. Использование объектов worker для параллельного выполнения поддерживается во Flash Player и в AIR на настольных платформах. Для мобильных платформ параллельное выполнение поддерживается в AIR на платформе Android и iOS. Прежде чем использовать многозадачность, вы можете проверить наличие поддержки многозадачности с помощью статического свойства isSupported.

Экземпляры Worker нельзя создавать напрямую путем вызова конструктора Worker(). В ситуациях, когда поддерживается использование объектов worker для параллельного выполнения кода, при запуске исполнительной среды автоматически создается объект worker, связанный с основным SWF-файлом. Этот объект называется первоначальным объектом worker.

Каждый дополнительный объект worker создается из отдельного SWF-файла. Чтобы создать новый экземпляр класса Worker, передайте массив ByteArray с байтовым содержимым SWF-файла фонового объекта worker в качестве аргумента метода createWorker() класса WorkerDomain. Существует три способа получить доступ к байтовому содержимому SWF-файла для этой цели:

  • Использовать метатег [Embed] для внедрения SWF-файла в приложение в виде байтового массива (ByteArray):

     // 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();
     }
  • Использовать один SWF-файл и как первоначальный, и как фоновый объект worker:

     // The primordial worker's main class constructor
     public function PrimordialWorkerClass()
     {
       init();
     }
     
     private function init():void
     {
       var swfBytes:ByteArray = this.loaderInfo.bytes;
       
       // Check to see if this is the primordial worker
       if (Worker.current.isPrimordial)    
       {
         // create a background worker
         var bgWorker:Worker = WorkerDomain.current.createWorker(swfBytes);
         
         // 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();
       }
       else // entry point for the background worker
       {
         // set up communication between workers using getSharedProperty()
         // ... (not shown)
         
         // start the background work
       }
     }

Объекты worker выполняются изолированно друг от друга и не имеют доступа к памяти, переменным и коду других объектов worker. Тем не менее, существует три механизма для передачи сообщений и данных между экземплярами Worker:

  • Общие свойства. Каждый объект worker имеет внутренний набор именованных значений, которые можно считывать и устанавливать из самого этого объекта и из других объектов worker. Для установки значения используется метод setSharedProperty(), для чтения — метод getSharedProperty().
  • MessageChannel. Объект MessageChannel предназначен для односторонней отправки сообщений и данных из одного объекта worker в другой. Код в объекте-получателе worker может прослушивать события и получать уведомления о поступлении сообщений. Для создания объекта MessageChannel используйте метод createMessageChannel().
  • Общий ByteArray: Если свойство shareable объекта ByteArray имеет значение true, для экземпляров этого объекта во всех объектах worker используется одна и та же системная память. Поскольку общая память доступна всем объектам worker одновременно, в программном коде должен быть предусмотрен механизм для предупреждения проблем из-за внезапного изменения данных (такие механизмы приведены в описании свойства ByteArray.shareable).

Код фонового объекта worker не имеет доступа к некоторым прикладным интерфейсам (API) среды выполнения. В основном сюда относятся прикладные интерфейсы, связанные с пользовательским вводом-выводом и такими элементами операционной системы, как окна или перетаскивание. Как правило, все прикладные интерфейсы (API), которые поддерживаются не во всех контекстах, содержат свойства isSupported, available и другие аналогичные свойства, позволяющие перед использованием прикладного интерфейса проверить его доступность в контексте фонового объекта worker.

Примечание. Собственные расширения не поддерживаются для фоновых и вторичных объектов Worker.

Полезный эффект объектов Worker состоит в том, что они снижают вероятность пропуска кадров вследствие блокирования основного потока отрисовки другим кодом. Тем не менее, для объектов Worker требуется дополнительная системная память и ресурсы центрального процессора, что может влиять на итоговую производительность. Поскольку каждый объект Worker использует отдельный экземпляр виртуальной среды исполнения, накладные расходы могут быть велики даже для элементарных объектов worker. При использовании объектов Worker проверяйте работу кода на всех целевых платформах, чтобы убедиться, что нагрузка на систему является приемлемой. Adobe рекомендует не использовать в типовых сценариях более одного или двух фоновых объектов Worker.

Посмотреть примеры

Дополнительно

Связанные элементы API



Общедоступные свойства
 СвойствоОпределено
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  current : Worker
[статические] [только для чтения] Предоставляет доступ к объекту worker, содержащему текущий код
Worker
  isPrimordial : Boolean
[только для чтения] Обозначает, является ли данный объект worker первоначальным объектом worker.
Worker
  isSupported : Boolean
[статические] [только для чтения] Указывает, поддерживает ли текущий контекст выполнения объекты Worker для организации параллельного выполнения кода.
Worker
  state : String
[только для чтения] Текущее состояние объекта worker в пределах его жизненного цикла.
Worker
Общедоступные методы
 МетодОпределено
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
[переопределить] Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии.
Worker
  
Создает новый экземпляр MessageChannel для отправки сообщений из объекта worker, для которого производится вызов этого метода, в другой объект worker.
Worker
 Inherited
Посылает событие в поток событий.
EventDispatcher
  
Извлекает значение, хранящееся в данном объекте worker по строковому ключу.
Worker
 Inherited
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события.
EventDispatcher
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
[переопределить] Удаляет прослушиватель из объекта EventDispatcher.
Worker
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
  
Представляет именованное значение, доступное коду, выполняющемуся в SWF объекта worker.
Worker
  
Запускает выполнение кода объекта worker.
Worker
  
Останавливает выполнение кода объекта worker.
Worker
 Inherited
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
 Inherited
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником.
EventDispatcher
События
 Событие Сводка Определено
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR перемещается в фокус операционной системы и становится активным.EventDispatcher
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR теряет фокус системы и становится неактивным.EventDispatcher
  Отправляется, когда изменяется значение свойства state объекта worker.Worker
Сведения о свойстве

current

свойство
current:Worker  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Предоставляет доступ к объекту worker, содержащему текущий код



Реализация
    public static function get current():Worker

isPrimordial

свойство 
isPrimordial:Boolean  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Обозначает, является ли данный объект worker первоначальным объектом worker.

Первоначальный объект worker — это объект worker, в котором выполняется первоначальный SWF-файл. Этот объект worker управляет отрисовкой изображения на экране.

Это свойство может использоваться в приложениях, где первоначальный объект worker и фоновый объект worker представляют собой два экземпляра одного и того же SWF-файла. Альтернативным решением может быть структурирование кода таким образом, чтобы фоновый объект worker использовал код, скомпилированный в отдельный SWF-файл, не совпадающий с первоначальным объектом worker.



Реализация
    public function get isPrimordial():Boolean

isSupported

свойство 
isSupported:Boolean  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Указывает, поддерживает ли текущий контекст выполнения объекты Worker для организации параллельного выполнения кода.

Если параллельное выполнение доступно, это свойство имеет значение true.



Реализация
    public static function get isSupported():Boolean

state

свойство 
state:String  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Текущее состояние объекта worker в пределах его жизненного цикла. Возможные значения этого свойства определены в файле WorkerState.



Реализация
    public function get state():String

Связанные элементы API

Сведения о методе

addEventListener

()метод
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии. Можно регистрировать прослушиватели событий в любом узле из списка отображения для каждого типа события, фазы и приоритета.

После успешной регистрации прослушивателя событий невозможно изменить его приоритет путем дополнительных вызовов addEventListener(). Чтобы изменить приоритет прослушивателя, необходимо сначала вызвать метод removeListener(). Затем можно снова зарегистрировать прослушиватель с новым приоритетом.

Следует учесть, что после регистрации прослушивателя последующие вызовы метода addEventListener() с другим значением свойства type или useCapture приводят к регистрации другого прослушивателя. Например, прослушиватель, изначально зарегистрированный со значением useCapture, равным true, прослушивает только во время фазы захвата. Если вызвать метод addEventListener() еще раз с тем же объектом прослушивателя, но со свойством useCapture в значении false, то будет два прослушивателя: один — прослушивающий в фазе захвата, а другой — в целевой фазе и фазе восходящей цепочки.

Невозможно зарегистрировать прослушиватель события только для целевой фазы или для фазы восходящей цепочки. Эти фазы соединены при регистрации, поскольку восходящая цепочка применяется только к предшественникам целевого узла.

Если прослушиватель событий больше не нужен, его можно удалить, вызвав метод removeEventListener(), иначе могут возникнуть проблемы с памятью. Прослушиватели событий не удаляются из памяти автоматически, так как сборщик мусора не удаляет прослушиватель, пока существует объект, отправляющий соответствующее событие (если параметру useWeakReference не задано значение true).

Копирование экземпляра EventDispatcher не приводит к копированию прослушивателей событий, присоединенных к нему. (Если для вновь создаваемого узла требуется прослушиватель событий, его необходимо присоединить после создания узла.) При этом при перемещении экземпляра EventDispatcher присоединенные к нему прослушиватели событий перемещаются вместе с ним.

Если прослушиватель регистрируется для узла в тот момент, когда на нем обрабатывается событие, то в текущей фазе он не запускается, однако может запуститься в следующей фазе потока события, например в фазе восходящей цепочки.

Прослушиватель событий, удаленный из узла во время обработки события на этом узле, будет запускаться текущими операциями. После удаления прослушиватель событий больше не вызывается (если не будет снова зарегистрирован для дальнейшей обработки).

Параметры

type:String — Тип события.
 
listener:Function — Функция прослушивателя, обрабатывающая событие. Эта функция должна принимать объект Event в качестве единственного параметра и не должна что-либо возвращать , как показано в примере:
function(evt:Event):void

Эта функция может иметь любое имя.

 
useCapture:Boolean (default = false)Определяет, работает ли прослушиватель в фазе захвата или в целевой фазе и в фазе восходящей цепочки. Если значение useCapture равно true, прослушиватель обрабатывает событие только во время фазы захвата, но не во время целевой фазы или фазы восходящей цепочки. Если значение useCapture равно false, то прослушиватель обрабатывает событие только в целевой фазе или фазе восходящей цепочки. Чтобы прослушивать событие во всех трех фазах, необходимо вызвать addEventListener() дважды: один раз с useCapture в значении true, а другой — с useCapture в значении false.
 
priority:int (default = 0) — Уровень приоритета прослушивателя событий. Приоритет определяется 32-разрядным целым числом со знаком. Чем больше число, тем выше приоритет. Все прослушиватели событий с приоритетом n обрабатываются перед прослушивателями с приоритетом n-1. Прослушиватели с одинаковым приоритетом обрабатываются в порядке их добавления. Значение приоритета по умолчанию равно 0.
 
useWeakReference:Boolean (default = false) — Определяет, является ли ссылка на прослушиватель «сильной» или «слабой». «Сильная» ссылка (по умолчанию) предотвращает удаление прослушивателя сборщиком мусора. «Слабая» ссылка позволяет удалить прослушиватель.

Функции элементов уровня класса не подлежат удалению в качестве мусора, вследствие чего можно установить useWeakReference равным true для функций элементов уровня класса, не подвергая их возможности подобного удаления. Если свойству useWeakReference присвоить значение true для прослушивателя, который является вложенной внутренней функцией, то функция будет очищена и перестанет быть постоянной. При создании ссылок на внутреннюю функцию (возможно сохранение в другой переменной) она не будет собираться в качестве мусора и останется устойчивой.

createMessageChannel

()метод 
public function createMessageChannel(receiver:Worker):MessageChannel

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Создает новый экземпляр MessageChannel для отправки сообщений из объекта worker, для которого производится вызов этого метода, в другой объект worker. Код объекта worker, создающий объект MessageChannel, может использовать последний для односторонней отправки сообщений в объект Worker, переданный в аргументе receiver.

Несмотря на то, что экземпляр MessageChannel может использоваться для отправки сообщений и данных из одного экземпляра Worker в другой, необходимо передать дочернему объекту Worker в виде общего свойства по меньшей мере один экземпляр MessageChannel с помощью метода setSharedProperty() вызывающего объекта worker.

    outgoingChannel = Worker.current.createMessageChannel(bgWorker);
    incomingChannel = bgWorker.createMessageChannel(Worker.current);
    
    bgWorker.setSharedProperty("incoming", outgoingChannel);
    bgWorker.setSharedProperty("outgoing", incomingChannel);
    
    // listen for messages from the receiving MessageChannel
    // This event is triggered when the background sends a message to this worker
    incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, incomingMessageHandler);

Параметры

receiver:Worker — Объект worker, который будет получать сообщения, передаваемые через созданный канал сообщений

Возвращает
MessageChannel — Объект MessageChannel создается данной операцией

getSharedProperty

()метод 
public function getSharedProperty(key:String):*

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Извлекает значение, хранящееся в данном объекте worker по строковому ключу.

Код дочернего объекта worker может использовать данный метод для извлечения значения уже в конструкторе главного класса SWF-файла данного объекта.

Параметры

key:String — Имя общего свойства, к которому производится доступ

Возвращает
* — Значение общего свойства, соответствующее указанному ключу или null, если ключу не сопоставлено никакого значения

removeEventListener

()метод 
override public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Удаляет прослушиватель из объекта EventDispatcher. При отсутствии прослушивателя, зарегистрированного с объектом EventDispatcher, вызов этого метода не оказывает эффекта.

Параметры

type:String — Тип события.
 
listener:Function — Удаляемый объект прослушивателя.
 
useCapture:Boolean (default = false)Указывает, был ли прослушиватель зарегистрирован для фазы захвата или целевой фазы и фазы восходящей цепочки. Если прослушиватель зарегистрирован и для фазы захвата, и для фаз цели и восходящей цепочки, метод removeEventListener() необходимо вызвать дважды: один раз с useCapture() в значении true, а другой раз с useCapture() в значении false.

setSharedProperty

()метод 
public function setSharedProperty(key:String, value:*):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Представляет именованное значение, доступное коду, выполняющемуся в SWF объекта worker.

Данный метод можно вызывать перед вызовом метода start() объекта worker. В этом случае общее свойство доступно коду SWF объекта worker в момент создания в конструкторе.

В параметре value можно передать практически любой объект. За исключением случаев, описанных ниже, объект в параметре value не передается по ссылке. Любые изменения объекта, производимые в одном объекте worker после вызова метода setSharedProperty() не передаются в другой объект worker. Объект копируется путем сериализации в формате AMF3 и последующей десериализации в новый объект в объекте-получателе worker. По этой причине любой объект, не сериализуемый в формате AMF3, в том числе отображаемые объекты, не может передаваться в параметре value. Для корректной пересылки пользовательского класса его определение должно быть зарегистрировано с помощью функции flash.net.registerClassAlias() или метаданных [RemoteClass]. В любом из указанных методов должен использоваться один и тот же псевдоним для обоих версий класса в каждом из объектов worker.

Существует пять типов объектов, которые не копируются между объектами worker, а используются ими совместно:

  • Worker
  • MessageChannel
  • общий ByteArray (объект ByteArray, у которого свойство shareable имеет значение true
  • объект Mutex
  • объект Condition

При передаче экземпляров этих объектов в параметре value, каждый объект worker получает ссылку на один и тот же исходный объект. Изменения, производимые над экземпляром объекта, моментально становятся доступны в других объектах worker. Кроме того, при многократной отправке с помощью метода setSharedProperty() одного и того же объекта, принадлежащего одному из этих типов, исполнительная среда не создает новые копии этого объекта в объекте-получателе worker. Вместо этого повторно используется одна и та же ссылка, что снижает расход системной памяти.

Вызов этого метода со значением параметра null или undefined для аргумента value сбрасывает любое ранее установленное значение для указанного значения key. Сброс значения таким способом удаляет ссылку на это значение, позволяя сборщику мусора утилизировать память.

В качестве аргумента key можно указывать любое значение типа String. Эти общие свойства могут использоваться в любом коде, имеющем доступ к объекту worker. Чтобы избежать нежелательного перезаписывания существующего значения, используйте префиксы, суффиксы или другие приемы, позволяющие сделать имена ключей уникальными.

Параметры

key:String — Имя, под которым производится доступ к общему свойству.
 
value:* — Значение общего свойства.

Связанные элементы API

start

()метод 
public function start():void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Запускает выполнение кода объекта worker. Исполнительная среда создает поток worker и вызывает конструктор главного класса SWF объекта worker.

Эта операция является асинхронной. По завершении запуска объекта worker его свойство state меняет значение на WorkerState.RUNNING и генерируется событие workerState.

terminate

()метод 
public function terminate():Boolean

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Останавливает выполнение кода объекта worker. Вызов этого метода прерывает любой текущий сценарий ActionScript в SWF объекта worker.

Возвращает
Booleantrue, если выполнение кода объекта worker было прервано, либо false, если объект worker не запускался
Сведения о событии

workerState

Событие
Тип объекта события: flash.events.Event
свойство Event.type = flash.events.Event.WORKER_STATE

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.4, AIR 3.4

Отправляется, когда изменяется значение свойства state объекта worker.

Константа Event.WORKER_STATE определяет значение свойства type объекта события workerState.

Это событие имеет следующие свойства:

СвойствоЗначение
bubblesfalse
cancelablefalse; поведение по умолчанию, подлежащее отмене, не определено.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
targetОбъект, отправивший это событие.
WorkerExample.as

В следующем примере показано, как использовать объект Worker для выполнения задачи в фоновом режиме. Также пример иллюстрирует связь между родительским объектом worker и фоновым объектом worker, в том числе посредством передачи объекта пользовательского класса между ними.

Пример состоит из трех классов ActionScript: WorkerExample представляет собой главный класс и определяет родительский объект worker. BackgroundWorker — это класс, который выполняет фоновую работу. Этот класс компилируется как основной класс SWF-файла фонового объекта worker. CountResult — это пользовательский класс, используемый для передачи данных между двумя объектами worker. Это позволяет передать данные одним пакетом вместо одиночных значений.

В данном примере фоновый объект worker выполняет циклический счет до значения, заданного родительским объектом worker. По мере решения этой задачи фоновый объект worker отправляет сообщения о ходе выполнения в родительский объект worker. Наконец, по завершении счета фоновый объект worker уведомляет родительский объект worker о завершении своей работы и о времени, затраченном на ее выполнение.

Класс WorkerExample — это основной класс SWF-файла. Он является главным классом первоначального объекта worker. В методе initialize() создается фоновый объект worker, для чего используется байтовое содержимое класса BackgroundWorker, встраиваемое с помощью тега [Embed].

После создания фонового объекта worker вызовом метода WorkerDomain.createWorker() настраивается связь между двумя объектами worker. Вначале создается набор объектов MessageChannel. Эти объекты передаются в фоновый объект worker путем вызова его метода setSharedProperty(). Затем производится подписка на событие workerState фонового объекта Worker и последний запускается вызовом метода start().

По мере решения задачи фоновым объектом worker, этот объект отправляет сообщения о ходе выполнения (и впоследствии — о результате выполнения) в родительский объект worker. Родительский объект worker использует эту информацию для обновления индикатора выполнения и текстовой метки.

package
{
    import com.adobe.example.vo.CountResult;
    
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.net.registerClassAlias;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.system.WorkerDomain;
    import flash.system.WorkerState;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;
    import flash.utils.ByteArray;
    
    public class WorkerExample extends Sprite
    {
        // ------- Embed the background worker swf as a ByteArray -------
        [Embed(source="../workerswfs/BackgroundWorker.swf", mimeType="application/octet-stream")]
        private static var BackgroundWorker_ByteClass:Class;
        public static function get BackgroundWorker():ByteArray
        {
            return new BackgroundWorker_ByteClass();
        }
        
        
        private var bgWorker:Worker;
        private var bgWorkerCommandChannel:MessageChannel;
        private var progressChannel:MessageChannel;
        private var resultChannel:MessageChannel;
        
        
        public function WorkerExample()
        {
            initialize();
        }
        
        
        private function initialize():void
        {
            // create the user interface
            setupStage();
            createStatusText();
            createProgressBar();
            
            // Register the alias so we can pass CountResult objects between workers
            registerClassAlias("com.adobe.test.vo.CountResult", CountResult);
            
            // Create the background worker
            bgWorker = WorkerDomain.current.createWorker(BackgroundWorker);
            
            // Set up the MessageChannels for communication between workers
            bgWorkerCommandChannel = Worker.current.createMessageChannel(bgWorker);
            bgWorker.setSharedProperty("incomingCommandChannel", bgWorkerCommandChannel);
            
            progressChannel = bgWorker.createMessageChannel(Worker.current);
            progressChannel.addEventListener(Event.CHANNEL_MESSAGE, handleProgressMessage)
            bgWorker.setSharedProperty("progressChannel", progressChannel);
            
            resultChannel = bgWorker.createMessageChannel(Worker.current);
            resultChannel.addEventListener(Event.CHANNEL_MESSAGE, handleResultMessage);
            bgWorker.setSharedProperty("resultChannel", resultChannel);
            
            // Start the worker
            bgWorker.addEventListener(Event.WORKER_STATE, handleBGWorkerStateChange);
            bgWorker.start();
        }
        
        
        private function handleBGWorkerStateChange(event:Event):void
        {
            if (bgWorker.state == WorkerState.RUNNING) 
            {
                _statusText.text = "Background worker started";
                bgWorkerCommandChannel.send(["startCount", 100000000]);
            }
        }
        
        
        private function handleProgressMessage(event:Event):void
        {
            var percentComplete:Number = progressChannel.receive();
            setPercentComplete(percentComplete);
            _statusText.text = Math.round(percentComplete).toString() + "% complete";
        }
        
        
        private function handleResultMessage(event:Event):void
        {
            var result:CountResult = resultChannel.receive() as CountResult;
            setPercentComplete(100);
            _statusText.text = "Counted to " + result.countTarget + " in " + (Math.round(result.countDurationSeconds * 10) / 10) + " seconds";
        }
        
        
        // ------- Create UI -------
        
        private var _currentPercentComplete:int = 0;
        private var _needsValidation:Boolean = false;
        private var _statusText:TextField;
        private var _progressBarRect:Shape;
        private var _progressBar:Shape;
        
        private function setupStage():void
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.stageWidth = 800;
            stage.stageHeight = 600;
            stage.color = 0xffffff;
        }
        
        
        private function createStatusText():void
        {
            _statusText = new TextField();
            _statusText.width = 400;
            _statusText.height = 25;
            _statusText.x = (stage.stageWidth - _statusText.width) / 2;
            _statusText.y = 150;
            
            var statusTextFormat:TextFormat = new TextFormat();
            statusTextFormat.color = 0xeeeeee;
            statusTextFormat.font = "Verdana";
            statusTextFormat.align = TextFormatAlign.CENTER;
            statusTextFormat.size = 16;
            _statusText.defaultTextFormat = statusTextFormat;
            _statusText.wordWrap = false;
            _statusText.opaqueBackground = 0x999999;
            _statusText.selectable = false;
            
            _statusText.text = "Initializing...";
            
            addChild(_statusText);
        }
        
        
        private function createProgressBar():void
        {
            _progressBarRect = new Shape();
            _progressBarRect.graphics.beginFill(0x000000, 0);
            _progressBarRect.graphics.lineStyle(2, 0x000000);
            _progressBarRect.graphics.drawRect(0, 0, 400, 30);
            _progressBarRect.graphics.endFill();
            
            _progressBarRect.x = (stage.stageWidth - _progressBarRect.width) / 2;
            _progressBarRect.y = 100;
            
            addChild(_progressBarRect);
            
            _progressBar = new Shape();
            _progressBar.graphics.beginFill(0x0000ee);
            _progressBar.graphics.drawRect(0, 0, 391, 21);
            _progressBar.x = _progressBarRect.x + 4;
            _progressBar.y = _progressBarRect.y + 4;
            
            addChild(_progressBar);
            
            _progressBar.scaleX = 0;
        }
        
        private function setPercentComplete(percentComplete:int):void
        {
            if (_currentPercentComplete == percentComplete)
                return;
            
            _currentPercentComplete = percentComplete;
            invalidateValue();
        }
        
        
        private function invalidateValue():void
        {
            if (_needsValidation)
                return;
            
            _needsValidation = true;
            addEventListener(Event.EXIT_FRAME, validate);
        }
        
        private function validate(event:Event):void
        {
            removeEventListener(Event.EXIT_FRAME, validate);
            _needsValidation = false;
            
            _redrawProgressBar();
        }
        
        private function _redrawProgressBar():void
        {
            _progressBar.scaleX = _currentPercentComplete / 100;
        }
    }
}
WorkerExample.BackgroundWorker.as

Этот класс содержит код фонового объекта worker. Данный класс компилируется в отдельный SWF-файл. Полученный SWF-файл затем внедряется в главный SWF-файл.

В методе initialize() происходит прием объектов MessageChannel, переданных родительским объектом worker. Эти объекты используются для связи между двумя объектами worker.

Родительский объект worker вызывает метод send() канала сообщений commandChannel для отправки сообщения. В фоновом объекте worker исполнительная среда распределяет событие channelMessage посредством вызова метода handleCommandMessage().

Фактическая полезная работа выполняется фоновым объектом worker в методе count(). По мере выполнения подсчета фоновый объект worker отправляет в родительский объект worker сообщения о ходе выполнения с помощью метода send() объекта progressChannel типа MessageChannel. По завершении счета вызывается метод send() объекта resultChannel типа MessageChannel.

package com.adobe.example.workers
{
    import com.adobe.example.vo.CountResult;
    
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.registerClassAlias;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.utils.getTimer;
    
    public class BackgroundWorker extends Sprite
    {
        private var commandChannel:MessageChannel;
        private var progressChannel:MessageChannel;
        private var resultChannel:MessageChannel;
        
        
        public function BackgroundWorker()
        {
            initialize();
        }
        
        
        private function initialize():void
        {
            registerClassAlias("com.adobe.test.vo.CountResult", CountResult);
            
            // Get the MessageChannel objects to use for communicating between workers
            // This one is for receiving messages from the parent worker
            commandChannel = Worker.current.getSharedProperty("incomingCommandChannel") as MessageChannel;
            commandChannel.addEventListener(Event.CHANNEL_MESSAGE, handleCommandMessage);
            // These are for sending messages to the parent worker
            progressChannel = Worker.current.getSharedProperty("progressChannel") as MessageChannel;
            resultChannel = Worker.current.getSharedProperty("resultChannel") as MessageChannel;
        }        
        
        
        private function handleCommandMessage(event:Event):void
        {
            if (!commandChannel.messageAvailable)
                return;
            
            var message:Array = commandChannel.receive() as Array;
            
            if (message != null && message[0] == "startCount")
            {
                count(uint(message[1]));
            }
        }
        
        
        private function count(targetValue:uint):void
        {
            var startTime:int = getTimer();
            var onePercent:uint = uint(Math.ceil(targetValue / 100));
            var oneHalfPercent:Number = onePercent / 2;
            
            var i:uint = 0;
            while (i < targetValue)
            {
                i++;
                // only send progress messages every one-half-percent milestone
                // to avoid flooding the message channel
                if (i % oneHalfPercent == 0)
                {
                    progressChannel.send(i / onePercent);
                }
            }
            
            var elapsedTime:int = getTimer() - startTime;
            var result:CountResult = new CountResult(targetValue, elapsedTime / 1000);
            resultChannel.send(result);
            
            trace("counted to", targetValue.toString(), "in", elapsedTime, "milliseconds");
        }
    }
}
WorkerExample.CountResult.as

Этот класс определяет объект-значение CountResult. Это пользовательский класс для передачи между объектами worker. Для того чтобы передача пользовательского класса между объектами worker была возможна, каждый объект worker должен вызвать метод registerClassAlias(), передав ему один и тот же псевдоним в качестве параметра.
package com.adobe.example.vo
{
    public class CountResult
    {
        public function CountResult(countTarget:uint=0, countTime:Number=0)
        {
            this.countTarget = countTarget;
            this.countDurationSeconds = countTime;
        }
        
        public var countTarget:uint;
        public var countDurationSeconds:Number;
    }
}
IOSWorkerExample.as

Поддержка параллельного выполнения для ОС iOS добавлена в AIR 19 и более поздних версий. Все соответствует версии для Flash/AIR Android, кроме различий в загрузке SWF и передаче массива байтов потоку worker.

1. Так как динамическая загрузка удаленного SWF-файла, содержащего код ActionScript, не поддерживается, удаленный SWF-файл необходимо передавать потоку worker в качестве очищенного SWF-файла. 2. Встраивание SWF-файлов (которые содержат код ABC) с помощью тега [Embed] не поддерживается в ОС iOS. Каждый дополнительный поток worker создается из отдельного SWF-файла. Чтобы создать новый экземпляр класса Worker, передайте массив ByteArray с байтовым содержимым SWF-файла фонового объекта worker в качестве аргумента метода createWorker() класса WorkerDomain.

Существует два способа получить доступ к байтовому содержимому SWF-файла для этой цели: использовать Loader для загрузки внешнего SWF-файла или использовать URLLoader.

В следующем примере API-интерфейс Loader загружает SWF-файл.

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.system.WorkerDomain;
    import flash.text.TextField;
    import flash.text.TextFormat;

    
    public class IOSWorkerExample extends Sprite
    {
        public var worker:Worker;
        public var bm:MessageChannel;
        public var mb:MessageChannel;
        public var tf:TextField;
        public var tfrmt:TextFormat;
        
        public function IOSWorkerExample()
        {
            super();
            
            
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            
            tf=new TextField();
            tfrmt= new TextFormat()
            tfrmt.size=80;
            tf.textColor = 0xFFFFF; 
            tf.defaultTextFormat=tfrmt;
        
            addChild(tf);        
            //creating the urlRequest object that references the background worker.
            var _urlRequest:URLRequest = new URLRequest("IOSBackWorker.swf");
            var _loader:Loader = new Loader();
            var _lc:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
            
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
            _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
            _loader.load(_urlRequest, _lc);
            
        }
        // This function is called once the swf loading is completed
        public function completeHandler(e:Event):void
        { 
            
            worker = WorkerDomain.current.createWorker(e.target.bytes);
            bm = worker.createMessageChannel(Worker.current);
            mb = Worker.current.createMessageChannel(worker);
            
            worker.setSharedProperty("btm", bm);
            worker.setSharedProperty("mtb", mb);
            //adding event handler on message receive from background
            bm.addEventListener(Event.CHANNEL_MESSAGE, onBackToMain);
            
            worker.start();  
            bm.receive(true);
            
        }
        
        public function errorHandler(e:IOErrorEvent):void
        {
            
            trace("In IO ErrorEvent Handler  "+e.text);
        }
        
        //This function is called when the main thread receives the message from the background worker.
        public function onBackToMain(event:Event):void
        {
            
            if(bm.messageAvailable)
            {
                // displaying the percentages based on the message received from the background.
                var progress:Number = bm.receive();
                trace("progress   "+progress);
                
                tf.text= progress.toString();
            }
        }
        
    }
}
IOSBackWorker.as

Так как код выполняется при вызове функции load загрузчика Loader, в фоновый процесс worker необходимо добавить проверку свойства isPrimordial, как показано в этом примере:
package
{
    import flash.display.Sprite;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.utils.ByteArray;
    import flash.utils.getTimer;
    
    public class IOSBackWorker extends Sprite
    {
        private var memory:ByteArray = new ByteArray();
        private var bm:MessageChannel;
        private var mb:MessageChannel;
        
        public function IOSBackWorker()
        {
            if(!Worker.current.isPrimordial)
            {
                memory.shareable = true;
                // creating objects of message channels
                bm = Worker.current.getSharedProperty("btm");
                mb = Worker.current.getSharedProperty("mtb");
                
                // calculating the percentage
                trace("message came");
                var j:Number =1;
                while (j<1000)
                {
                    for(var i=0;i<100;i++){}
                    var startTime=getTimer();
                    // adding delay
                    while (getTimer()-startTime <100);
                    
                    trace(j, (100*j)/1000);
                    var progress:Number=(100*j)/1000;
                    // sending the percentage to the main thread
                    bm.send(progress);                
                    
                    j++;
                }            
            }
        }        
    }
}




[ X ]Почему по-английски?
Содержимое Справочника ActionScript 3.0 отображается на английском языке

Не все части Справочника ActionScript 3.0 переводятся на все языки. Если какой-то текстовый элемент не переведен, он отображается на английском языке. Например, компонент ga.controls.HelpBox не переведен ни на один из языков. Это значит, что в русской версии справки компонент ga.controls.HelpBox будет отображаться на английском языке.