Naslaggids voor Adobe ActionScript® 3.0 voor het Adobe® Flash®-platform
Startpagina  |  Lijst met pakketten en klassen verbergen |  Pakketten  |  Klassen  |  Nieuw  |  Index  |  Bijlagen  |  Waarom in het Engels?
Filters: AIR 30.0 en eerder, Flash Player 30.0 en eerder, Flash Lite 4
Flex 4.6 en eerder, Flash Pro CS6 en eerder
Filters verbergen
flash.system 

Worker  - AS3

Pakkettenx

Hoofdniveau
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

Taalelementen

Algemene constanten
Algemene functies
Operatoren
Programmeerinstructies, gereserveerde woorden en compileraanwijzingen
Speciale typen

Bijlagen

Nieuw
Compilerfouten
Compilerwaarschuwingen
Uitvoeringsfouten
Migreren naar ActionScript 3
Ondersteunde tekensets
Alleen MXML-labels
Elementen van bewegings-XML
Timed Text-tags
Lijst van vervangen elementen
Constanten voor toegankelijkheidsimplementatie
ActionScript-voorbeelden gebruiken
Juridische kennisgeving
Pakketflash.system
Klassepublic final class Worker
OverervingWorker Inheritance EventDispatcher Inheritance Object

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Een Worker-object staat voor een worker, dat wil zeggen: een virtuele instantie van de Flash-runtime. Elke Worker-instantie beheert en biedt toegang tot de levenscyclus en gedeelde gegevens van een enkele worker.

Met een worker kunt u code 'op de achtergrond' uitvoeren terwijl er op hetzelfde moment andere bewerkingen worden uitgevoerd in een andere worker (inclusief de SWF-hoofdworker). Bij systeemcontexten zonder workers neemt de uitvoering van sommige bewerkingen, zoals de verwerking van een grote gegevensset in een lus, zo veel tijd in beslag dat de schermweergave niet snel genoeg kan worden vernieuwd door de hoofdthread van de toepassing. Dit leidt tot een schokkerige weergave en soms zelfs tot het vastlopen van het scherm.

Met behulp van workers kunt u dergelijke langdurige of trage bewerkingen op de achtergrond uitvoeren. Elke worker voert zijn code uit in een afzonderlijke uitvoeringsthread, los van de andere workers. Hierdoor wordt de code van een worker niet geblokkeerd door bewerkelijke code van een andere worker. In plaats daarvan worden beide sets met code parallel uitgevoerd. Het gevolg is dat code op de achtergrond kan worden uitgevoerd door een worker terwijl de hoofdthread van de toepassing beschikbaar blijft op het scherm continu bij te werken.

De mogelijkheid om meerdere sets met code-instructies gelijktijdig uit te voeren wordt gelijktijdige uitvoering genoemd.

Opmerking: het gebruik van workers voor gelijktijdige uitvoering wordt zowel ondersteund in Flash Player als in AIR op desktopplatforms. Voor mobiele platformen wordt gelijktijdigheid ondersteund in AIR bij zowel Android als iOS. Met de statische eigenschap isSupported kunt u controleren of gelijktijdige uitvoering wordt ondersteund, voordat u dit gaat uitproberen.

U kunt niet rechtstreeks Worker-instanties maken door de Worker()-constructor aan te roepen. Bij systeemcontexten waarin het gelijktijdige gebruik van workers wordt ondersteund, wordt de worker die is gekoppeld aan het SWF-hoofdbestand (oftewel de primordial worker) bij het opstarten automatisch door de runtime gemaakt.

Elke volgende worker wordt gemaakt op basis van een afzonderlijk SWF-bestand. Als u een nieuwe instantie van de Worker-klasse wilt maken, moet u een ByteArray met de bytes van het SWF-bestand van de 'worker op de achtergrond' doorgeven als argument bij de methode createWorker() van de WorkerDomain-klasse. Er zijn drie manieren om de bytes van een SWF-bestand op te halen:

  • Gebruik de [Embed]-metatag om het SWF-bestand als een ByteArray in te sluiten in de toepassing:

     // 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();
     }
  • Laad een extern SWF-bestand met behulp van 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();
     }
  • Gebruik een enkel SWF-bestand voor zowel de 'primordial worker' als voor de worker op de achtergrond.

     // 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
       }
     }

Workers worden afzonderlijk van elkaar uitgevoerd en hebben geen toegang tot hetzelfde geheugen, variabelen of code. Er zijn echter drie methoden om berichten en gegevens uit te wisselen tussen Worker-instanties:

  • Gedeelde eigenschappen: elke worker beschikt over een interne set met benoemde waarden die kunnen worden ingesteld en gelezen door de worker zelf, maar ook door andere workers. Met de methode setSharedProperty() kunt u een waarde instellen en met de methode getSharedProperty() kunt u een waarde lezen.
  • MessageChannel: met een MessageChannel-object kunt u berichten en gegevens in één richting verzenden van de ene worker naar de andere. De code in de ontvangende worker kan luisteren naar een gebeurtenis om een melding te ontvangen zodra een bericht arriveert. Als u een MessageChannel-object wilt maken, gebruikt u de methode createMessageChannel().
  • Deelbare ByteArray: als de eigenschap shareable van een ByteArray-object is ingesteld op true, wordt hetzelfde onderliggende geheugen gebruikt voor instanties van die ByteArray in alle workers. Omdat code in meerdere workers op hetzelfde moment toegang heeft tot het gedeelde geheugen, moet uw code de mechanismen gebruiken in de beschrijving van de eigenschap ByteArray.shareable om problemen met onverwachte gegevenswijzigingen te voorkomen.

Een aantal runtime-API's zijn niet beschikbaar voor code die in een worker op de achtergrond wordt uitgevoerd. Hierbij gaat het vooral om API's die zijn te maken hebben met gebruikersinvoer en -uitvoer, en om besturingssysteemelementen zoals vensters of sleepbewerkingen. Wanneer een API niet wordt ondersteund in alle systeemcontexten, moet u voordat u de API gebruikt, altijd eerst controleren of de API beschikbaar is in een systeemcontext met workers op de achtergrond. Gebruik hiervoor de eigenschappen isSupported, available en vergelijkbare eigenschappen.

Opmerking: native extensies worden niet ondersteund voor achtergrond en secundaire workers.

Workers zijn handig omdat het risico op een tragere framesnelheid doordat de hoofdthread voor rendering wordt geblokkeerd door andere code, wordt verkleind. Workers vereisen echter ook extra systeemgeheugen en CPU-gebruik, en dat gaat soms ten koste van de algehele prestaties van de toepassing. Aangezien elke worker een eigen instantie van de runtime-VM gebruikt, kan zelfs een eenvoudige worker leiden tot een aanzienlijke overhead. Wanneer u workers gebruikt, moet u uw code dan ook testen op alle doelplatforms om te voorkomen dat het systeem niet te zwaar wordt belast. Adobe raadt aan dat u niet meer dan een of twee workers op de achtergrond gebruikt in een typisch scenario.

Bekijk de voorbeelden

Meer informatie

Verwante API-elementen



Openbare eigenschappen
 EigenschapGedefinieerd door
 Inheritedconstructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie.
Object
  current : Worker
[statisch] [alleen-lezen] Biedt toegang tot de worker die de huidige code bevat
Worker
  isPrimordial : Boolean
[alleen-lezen] Geeft aan of deze worker de 'primordial worker' is.
Worker
  isSupported : Boolean
[statisch] [alleen-lezen] Geeft aan of de huidige context van de runtime ondersteuning biedt voor gelijktijdige code-uitvoering van de Worker-objecten.
Worker
  state : String
[alleen-lezen] De huidige status in de levenscyclus van de worker.
Worker
Openbare methoden
 MethodeGedefinieerd door
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
[overschrijven] Registreert een gebeurtenislistenerobject bij een object EventDispatcher, zodat de listener een melding van een gebeurtenis ontvangt.
Worker
  
Maakt een nieuwe MessageChannel-instantie om berichten te versturen van de worker waarvan de methode is aangeroepen. De berichten gaan naar een andere, ontvangende worker.
Worker
 Inherited
Verzendt een gebeurtenis naar de gebeurtenisstroom.
EventDispatcher
  
Hiermee wordt de waarde opgehaald die in deze worker is opgeslagen met een benoemde sleutel.
Worker
 Inherited
Controleert of het object EventDispatcher listeners heeft geregistreerd voor een specifiek type gebeurtenis.
EventDispatcher
 Inherited
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd.
Object
 Inherited
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven.
Object
 Inherited
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd.
Object
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
[overschrijven] Verwijdert een listener uit het object EventDispatcher.
Worker
 Inherited
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in.
Object
  
Biedt een benoemde waarde die beschikbaar is voor code die in het SWF-bestand van de worker wordt uitgevoerd.
Worker
  
Start de uitvoering van de worker.
Worker
  
Stopt de uitvoering van de code van deze worker.
Worker
 Inherited
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies.
Object
 Inherited
Retourneert een tekenreeksrepresentatie van het opgegeven object.
Object
 Inherited
Retourneert de primitieve waarde van het opgegeven object.
Object
 Inherited
Controleert of een gebeurtenislistener is geregistreerd bij dit object EventDispatcher of een van de voorouders voor het opgegeven type gebeurtenis.
EventDispatcher
Gebeurtenissen
 Gebeurtenis Overzicht Gedefinieerd door
 Inherited[uitgezonden gebeurtenis] Wordt verzonden wanneer Flash Player of de AIR-toepassing de besturingssysteemfocus krijgt en actief wordt.EventDispatcher
 Inherited[uitgezonden gebeurtenis] Wordt verzonden wanneer Flash Player of de AIR-toepassing de systeemfocus verliest en inactief wordt.EventDispatcher
  Wordt verzonden wanneer de waarde van de state-eigenschap van de worker verandert.Worker
Eigenschapdetails

current

eigenschap
current:Worker  [alleen-lezen]

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Biedt toegang tot de worker die de huidige code bevat



Implementatie
    public static function get current():Worker

isPrimordial

eigenschap 
isPrimordial:Boolean  [alleen-lezen]

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Geeft aan of deze worker de 'primordial worker' is.

De primordial worker is de worker waarin het oorspronkelijke SWF-bestand wordt uitgevoerd. Deze worker beheert de rendering van het scherm.

Deze eigenschap kan worden gebruikt om een toepassingarchitectuur op te zetten waarbij de 'primordial worker' en de worker op de achtergrond twee instanties van hetzelfde SWF-bestand vormen. Het alternatief is om de code zo te structureren dat de worker op de achtergrond andere code gebruikt en om deze code te compileren naar een ander SWF-bestand dan de 'primordial worker'.



Implementatie
    public function get isPrimordial():Boolean

isSupported

eigenschap 
isSupported:Boolean  [alleen-lezen]

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Geeft aan of de huidige context van de runtime ondersteuning biedt voor gelijktijdige code-uitvoering van de Worker-objecten.

Als gelijktijdige uitvoering beschikbaar is, wordt deze eigenschap ingesteld op true.



Implementatie
    public static function get isSupported():Boolean

state

eigenschap 
state:String  [alleen-lezen]

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

De huidige status in de levenscyclus van de worker. Mogelijke waarden voor deze eigenschap zijn gedefinieerd in de WorkerState-klasse.



Implementatie
    public function get state():String

Verwante API-elementen

Methodedetails

addEventListener

()methode
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Registreert een gebeurtenislistenerobject bij een object EventDispatcher, zodat de listener een melding van een gebeurtenis ontvangt. U kunt gebeurtenislisteners registreren op alle knooppunten in het weergaveoverzicht van een specifiek type gebeurtenis, fase of prioriteit.

Nadat het registreren van een gebeurtenislistener is voltooid, kunt u de prioriteit ervan niet wijzigen door extra aanroepen van addEventListener(). Wanneer u de prioriteit van een listener wilt wijzigen, moet u eerst removeListener() aanroepen. U kunt de listener opnieuw registreren met het nieuwe prioriteitsniveau.

Nadat de listener is geregistreerd, resulteren volgende aanroepen van addEventListener() met een andere waarde voor type of useCapture in het maken van een afzonderlijke listenerregistratie. Wanneer u bijvoorbeeld eerst een listener registreert bij useCapture ingesteld op true, luistert deze alleen tijdens de vastlegfase. Wanneer u addEventListener() opnieuw aanroept met hetzelfde listenerobject maar met useCapture ingesteld op false, hebt u twee afzonderlijke listeners: één die tijdens de vastlegfase luistert en één die tijdens de doel- en terugkoppelfasen luistert.

U kunt geen gebeurtenislistener registeren voor alleen de doel- of terugkoppelfase. Deze fasen worden bij de registratie gekoppeld, omdat terugkoppeling alleen van toepassing is op voorouders van het doelknooppunt.

Wanneer u een gebeurtenislistener niet langer nodig hebt, kunt u deze verwijderen door removeEventListener() aan te roepen; anders kan dit resulteren in geheugenproblemen. Gebeurtenisluisteraars worden niet automatisch uit het geheugen verwijderd, omdat de verzamelaar met ongewenste details de luisteraar niet verwijderd zolang het verzendende object bestaat (behalve als de parameter useWeakReference op true is ingesteld).

Het kopiëren van een instantie EventDispatcher kopieert de daaraan gekoppelde gebeurtenislisteners. (Wanneer uw nieuwe knooppunt een gebeurtenislistener nodig heeft, moet u de listener eraan koppelen na het maken van het knooppunt.) Wanneer u echter een instantie EventDispatcher verplaatst, worden de daaraan gekoppelde listeners mee verplaatst.

Wanneer de gebeurtenislistener wordt geregistreerd op een knooppunt terwijl een gebeurtenis op dit knooppunt wordt verwerkt, wordt de gebeurtenislistener niet geactiveerd tijdens de huidige fase maar kan wel worden geactiveerd in een latere fase in de gebeurtenisstroom, zoals de terugkoppelfase.

Wanneer een gebeurtenislistener wordt verwijderd uit een knooppunt terwijl een gebeurtenis wordt verwerkt op het knooppunt, wordt deze nog steeds geactiveerd door de huidige handelingen. Nadat deze is verwijderd, wordt de gebeurtenislistener niet meer aangeroepen (tenzij deze opnieuw wordt geregistreerd voor toekomstige verwerking).

Parameters

type:String — Het type gebeurtenis.
 
listener:Function — De listenerfunctie die de gebeurtenis verwerkt. Deze functie moet een Event-object accepteren als de enige parameter en niets retourneren, zoals in dit voorbeeld wordt getoond:
function(evt:Event):void

De functie kan elke naam hebben.

 
useCapture:Boolean (default = false)Bepaalt of de listener werkt in de vastleg-, doel- en terugkoppelfase. Wanneer useCapture wordt ingesteld op true, verwerkt de listener de gebeurtenis alleen tijdens de vastlegfase en niet tijdens de doel- of terugkoppelfase. Wanneer useCapture wordt ingesteld op false, verwerkt de listener de gebeurtenis alleen tijdens de doel- of terugkoppelfase. Wanneer u in alle drie de fasen naar de gebeurtenis wilt luisteren, roept u addEvenListener() tweemaal aan, één keer met useCapture ingesteld op true en één keer met useCapture ingesteld op false.
 
priority:int (default = 0) — Het prioriteitsniveau van de gebeurtenislistener. De prioriteit is opgegeven door een 32-bits geheel getal. Hoe hoger het getal, hoe hoger de prioriteit. Alle listeners met een prioriteit n worden verwerkt voor listeners met een prioriteit n -1. Wanneer twee of meer listeners dezelfde prioriteit hebben, worden ze verwerkt in de volgorde waarin ze werden toegevoegd. De standaardprioriteit is 0.
 
useWeakReference:Boolean (default = false) — Bepaalt of de verwijzing van de listener sterk of zwak is. Een sterke verwijzing (standaard) voorkomt dat uw listener wordt opgeschoond. Een zwakke verwijzing doet dat niet.

Lidfuncties op klasseniveau worden niet opgeschoond. U kunt dus useWeakReference op true instellen voor deze functies zonder dat deze zullen worden opgeschoond. Wanneer u useWeakReference op true instelt voor een listener die een geneste binnenfunctie is, wordt de functie wel opgeschoond en is deze niet meer blijvend. Wanneer u verwijzingen naar de binnenfunctie maakt (deze opslaat in een andere variabele), wordt de functie niet opgeschoond en blijft deze blijvend.

createMessageChannel

()methode 
public function createMessageChannel(receiver:Worker):MessageChannel

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Maakt een nieuwe MessageChannel-instantie om berichten te versturen van de worker waarvan de methode is aangeroepen. De berichten gaan naar een andere, ontvangende worker. De code in de worker die het MessageChannel-object maakt, kan hiermee berichten (in één richting) verzenden naar het opgegeven Worker-object dat is opgegeven als het receiver-argument.

Alhoewel een MessageChannel-instantie kan worden gebruikt om berichten en gegevens van één Worker-instantie naar een andere te verzenden, moet er minimaal één MessageChannel-instantie als een gedeelde eigenschap worden doorgegeven aan een onderliggende worker. Hiertoe moet de methode setSharedProperty() van het Worker-object worden aangeroepen.

    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);

Parameters

receiver:Worker — De worker die de berichten ontvangt die via het gemaakte berichtkanaal zijn verzonden

Geretourneerde waarde
MessageChannel — Het MessageChannel-object dat is gemaakt door de bewerking

getSharedProperty

()methode 
public function getSharedProperty(key:String):*

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Hiermee wordt de waarde opgehaald die in deze worker is opgeslagen met een benoemde sleutel.

De code in een onderliggende worker kan deze methode aanroepen om een waarde op te halen. Deze waarde is al tijdens de constructor-fase van de SWF-hoofdklasse beschikbaar.

Parameters

key:String — De naam van de gedeelde eigenschap die moet worden opgehaald

Geretourneerde waarde
* — De waarde van de gedeelde eigenschap die is opgeslagen met de opgegeven sleutel (of null als er geen waarde is opgeslagen voor de opgegeven sleutel)

removeEventListener

()methode 
override public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Verwijdert een listener uit het object EventDispatcher. Wanneer geen overeenkomende listener is geregistreerd bij het object EventDispatcher, heeft een aanroep van deze methode geen invloed.

Parameters

type:String — Het type gebeurtenis.
 
listener:Function — Het listenerobject dat wordt verwijderd.
 
useCapture:Boolean (default = false)Geeft aan of de listener is geregistreerd voor de vastleg-, doel- en terugkoppelfase. Wanneer de listener is geregistreerd voor zowel de vastlegfase als de doel- en terugkoppelfase, zijn twee aanroepen van de removeEventListener() nodig om beide te verwijderen, één met useCapture ingesteld op true en één met useCapture ingesteld op false.

setSharedProperty

()methode 
public function setSharedProperty(key:String, value:*):void

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Biedt een benoemde waarde die beschikbaar is voor code die in het SWF-bestand van de worker wordt uitgevoerd.

U kunt deze methode aanroepen voordat u de methode start() van de worker aanroept. In dat geval is de gedeelde eigenschap tijdens de constructiefase al beschikbaar voor code in het SWF-bestand van de worker.

Praktisch elk object kan als waarde worden doorgegeven aan de value-parameter. Met uitzondering van de onderstaande objecten, worden objecten die zijn doorgegeven aan de value-parameter, niet als referentie doorgegeven. Wijzigingen die worden doorgevoerd in het object van een worker nadat setSharedProperty() is aangeroepen, worden niet doorgevoerd in de andere worker. Het object wordt via serienummering gekopieerd naar de AMF3-indeling en vervolgens weer via serienummering omgezet als een nieuw object in de ontvangende worker. Dit is ook waarom objecten die niet via serienummering kunnen worden omgezet naar een AMF-indeling (zoals bijvoorbeeld weergaveobjecten), niet kunnen worden doorgegeven aan de value-parameter. Voor een juiste doorgave van een aangepaste klasse moet de klassendefinitie worden geregistreerd met de functie flash.net.registerClassAlias() of met [RemoteClass]-metagegevens. Voor beide methoden geldt dat hetzelfde alias moet worden gebruikt voor de klassenversies van beide workers.

Er zijn vijf objecttypen die een uitzondering vormen op de regel dat objecten niet daadwerkelijk worden gedeeld door workers:

  • Worker-item 
  • MessageChannel
  • deelbare ByteArray (een ByteArray-object waarvan de eigenschap shareable is ingesteld op true
  • Mutex
  • Condition

Wanneer u een instantie van een van deze objecten doorgeeft met de value-parameter, beschikt elke worker over een referentie naar hetzelfde onderliggende object. Wijzigingen die in één worker worden toegepast op een instantie zijn dan direct beschikbaar in alle andere workers. Bovendien geldt dat als u eenzelfde instantie van deze objecten meerdere keren doorgeeft aan een worker met behulp van setSharedProperty(), er niet telkens een nieuw exemplaar van het object in de ontvangende worker wordt gemaakt door de runtime. In plaats hiervan wordt dezelfde referentie opnieuw gebruikt, waardoor er minder systeemgeheugen in beslag wordt genomen.

Als u deze methode aanroept met de waarden null of undefined voor het value-argument, worden alle vooraf ingestelde waarden voor het opgegeven key-argument gewist. Als u een waarde op deze manier opschoont, worden ook de referenties naar deze waarde verwijderd, zodat ook deze gegevens worden opgeschoond.

U kunt elke tekenreekswaarde gebruiken in het key-argument. Deze gedeelde eigenschappen zijn beschikbaar voor elke willekeurige code die toegang heeft tot een worker. Om te voorkomen dat u per ongeluk een waarde overschrijft, kunt u een voorvoegsel, achtervoegsel of vergelijkbaar item gebruiken om unieke sleutelnamen te maken.

Parameters

key:String — De naam waarmee de gedeelde eigenschap wordt opgeslagen.
 
value:* — De waarde van de gedeelde eigenschap.

Verwante API-elementen

start

()methode 
public function start():void

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Start de uitvoering van de worker. De runtime maakt de thread van de worker en roept de constructor van de SWF-hoofdklasse van de worker aan.

Deze bewerking is asynchroon. Nadat de startprocedure van de worker volledig is uitgevoerd, wordt de state-eigenschap ingesteld op WorkerState.RUNNING, waarna een workerState-gebeurtenis wordt verzonden.

terminate

()methode 
public function terminate():Boolean

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Stopt de uitvoering van de code van deze worker. Als u deze methode aanroept, wordt alle huidige ActionScript-code in het SWF-bestand van de worker afgebroken.

Geretourneerde waarde
Booleantrue als de code in de worker werd uitgevoerd en vervolgens onderbroken, of false als de worker nog niet was gestart
Gebeurtenisdetails

workerState

Gebeurtenis
Type gebeurtenisobject: flash.events.Event
eigenschap Event.type = flash.events.Event.WORKER_STATE

Taalversie: ActionScript 3.0
Runtimeversies: Flash Player 11.4, AIR 3.4

Wordt verzonden wanneer de waarde van de state-eigenschap van de worker verandert.

De constante Event.WORKER_STATE definieert de waarde van de type-eigenschap van een workerState-gebeurtenisobject.

Deze gebeurtenis heeft de volgende eigenschappen:

EigenschapWaarde
bubblesfalse
cancelablefalse; er is geen standaardgedrag om te annuleren.
currentTargetHet object dat het gebeurtenisobject actief verwerkt met een gebeurtenislistener.
targetHet object dat deze gebeurtenis heeft verzonden.
WorkerExample.as

In het volgende voorbeeld ziet u hoe u een taak op de achtergrond kunt uitvoeren met een Worker-object. Ook ziet u hoe de communicatie verloopt tussen de bovenliggende worker en de worker op de achtergrond, inclusief het doorgeven van een aangepast klassenobject tussen beide workers.

In dit voorbeeld worden drie ActionScript-klassen toegepast: WorkerExample is de hoofdklasse en dus ook de bovenliggende worker. Met de BackgroundWorker-klasse worden de bewerkingen op de achtergrond uitgevoerd. Deze klasse wordt gecompileerd als hoofdklasse van de SWF-code van de worker op de achtergrond. CountResult is een aangepaste klasse waarmee gegevens tussen beide workers als een enkel object worden doorgegeven, en niet als meerdere waarden.

In dit voorbeeld telt de worker op de achtergrond in een lus, tot aan een waarde die door de bovenliggende worker is opgegeven. Terwijl de worker de code uitvoert, stuurt deze voortgangsberichten naar de bovenliggende worker. Wanneer de telling gereed is, stuurt de worker op de achtergrond een bericht naar de bovenliggende worker om aan te geven dat de bewerkingen zijn afgerond en in hoeveel tijd dat is gebeurd.

De WorkerExample-klasse is de SWF-hoofdklasse en dus ook de hoofdklasse van de 'primordial worker'. In de methode initialize() wordt de worker op de achtergrond gemaakt op basis van de bytes van de BackgroundWorker-klasse. Deze bytes zijn ingesloten met een [Embed]-tag.

Nadat de worker op de achtergrond is gemaakt door het aanroepen van WorkerDomain.createWorker(), worden de communicatiemogelijkheden tussen beide workers ingesteld door de code. Eerst maakt de code een set van MessageChannel-objecten. De code geeft deze objecten door aan de worker op de achtergrond door de methode setSharedProperty() aan te roepen. Tot slot registreert de code de workerState-gebeurtenis van het Worker-object op de achtergrond, waarna de worker wordt gestart door de start()-methode aan te roepen.

Terwijl de worker op de achtergrond zijn bewerkingen uitvoert, stuurt deze voortgangsberichten (en het uiteindelijke resultaat) naar de bovenliggende worker. De bovenliggende worker gebruikt deze informatie om de voortgangsbalk en de tekstindicator bij te werken.

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

Deze klasse bevat de code voor de worker op de achtergrond. Deze klasse wordt gecompileerd in een eigen SWF-bestand. Vervolgens wordt het SWF-bestand ingesloten in het SWF-hoofdbestand.

Met de methode initialize() worden de MessageChannel-objecten ontvangen die door de bovenliggende worker zijn doorgegeven. Deze objecten worden toegepast in de communicatie tussen beide workers.

De bovenliggende worker roept de methode send() aan op het commandChannel-berichtkanaal om een bericht te verzenden. In de worker op de achtergrond wordt vervolgens de channelMessage-gebeurtenis verzonden door de runtime. Hiertoe wordt de methode handleCommandMessage() aangeroepen.

Het echte werk van de worker op de achtergrond vindt plaats in de methode count(). Terwijl de worker op de achtergrond de telling uitvoert, stuurt deze voortgangsberichten door de methode send() aan te roepen op het MessageChannel-object progressChannel. Als de worker gereed is met tellen, roept het de methode send() aan op het MessageChannel-object resultChannel.

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

Deze klasse definieert de waarde van het CountResult-object. Dit is een aangepaste klasse die wordt doorgegeven tussen beide workers. Om een aangepaste klasse door te geven tussen workers, moet elke worker de methode registerClassAlias() aanroepen en dezelfde aliasnaam gebruiken.
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

Ondersteuning voor gelijktijdigheid bij iOS is beschikbaar in AIR-versie 19 en hoger. Alles blijft coherent voor wat betreft Flash/AIR Android, behalve verschillen in het laden van SWF-bestande en het doorgeven van bytearray's aan de worker.

1. Aangezien een extern SWF-bestand dat Actionscript-code bevat niet dynamisch kan worden geladen, moet het externe SWF-bestand als een gestript SWF-bestand worden doorgegeven aan de worker. 2. Het insluiten van SWF-bestanden (die ABC-code bevatten) met de code [Embed] werkt niet op iOS. Elke volgende worker wordt gemaakt op basis van een afzonderlijk SWF-bestand. Als u een nieuwe instantie van de Worker-klasse wilt maken, moet u een ByteArray met de bytes van het SWF-bestand van de 'worker op de achtergrond' doorgeven als argument bij de methode createWorker() van de WorkerDomain-klasse.

Er zijn twee algemene manieren om hiervoor toegang te krijgen tot de bytes van een SWF-bestand op iOS: ten eerste kunt u Loader gebruiken om een extern SWF-bestand te laden, en ten tweede kunt u URLLoader te gebruiken om SWF-bestanden te laden.

In het volgende voorbeeld wordt de Loader-API gebruikt om het SWF-bestand te laden.

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

Aangezien de code wordt uitgevoerd terwijl de laadfunctie van Loader wordt aangeroepen, moeten we een controlepunt voor de eigenschap isPrimordial plaatsen in de achtergrondworker, zoals in dit voorbeeld.
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 ]Waarom in het Engels?
Sommige inhoud van de Naslaggids voor ActionScript 3.0 staat in het Engels

Niet alle onderdelen van de Naslaggids voor ActionScript 3.0 zijn in alle talen vertaald. Wanneer een taalelement niet is vertaald, wordt het in het Engels weergegeven. Zo is de klasse ga.controls.HelpBox niet in elke taal vertaald. In de Nederlandse versie van de naslaggids wordt de klasse ga.controls.HelpBox bijvoorbeeld in het Engels weergegeven.