Domanda

Quando, in ActionScript, viene inviato un evento:

foo.addEventListener("some event", someHandler);
foo.dispatchEvent(new Event("some event"));

A che punto vengono eseguiti i gestori di eventi?

Lo chiedo perché l'ho rilevato alla fine di un Guida per sviluppatori Adobe :

  

Si noti che alcune proprietà vengono assegnate a [AsyncToken] dopo aver effettuato la chiamata al servizio remoto. In un linguaggio multi-thread, ci sarebbe una condizione di competizione in cui il risultato ritorna prima dell'assegnazione del token. Questa situazione non è un problema in ActionScript perché la chiamata remota non può essere avviata fino al termine del codice attualmente in esecuzione .

Ma non sono riuscito a trovare alcuna informazione su cosa intendessero per "quotazione in corso" "


Vedi anche: Ordine di esecuzione del gestore eventi ActionScript

È stato utile?

Soluzione

Actionscript è un linguaggio basato su eventi a thread singolo. Nota come non ci siano " principali " metodi in Actionscript. Tutto il codice appartiene agli eventi, ad es. il codice di inizializzazione tende a essere inserito in risposta a "creazione Completata" eventi. Una volta eseguito il codice nel gestore eventi, viene eseguito l'evento successivo. Quindi se lo facessi:

private function someOtherHandler():void 
{
    foo.addEventListener("some event", someHandler);
    while(true) { ... spin wheels ... }
}

Nessun altro gestore sarebbe in grado di funzionare perché il codice attualmente in esecuzione (il ciclo infinito) non si completerebbe mai.

Nota che Flash probabilmente utilizza più thread internamente, ma che viene estratto dallo sviluppatore.

Altri suggerimenti

Se si chiama dispatchEvent () in ActionScript, i gestori verranno eseguiti immediatamente. L'ordine viene determinato prima dalla priorità specificata quando si chiama addEventListener () e quindi dall'ordine in cui sono stati aggiunti se le priorità sono uguali. Primo arrivato, primo servito.

Se un evento viene inviato internamente da Flash Player, come Event.COMPLETE da un'istanza URLLoader o qualsiasi altra cosa che richieda la comunicazione di rete, non verrà inviato mentre ActionScript è in esecuzione. Viene messo in coda per dopo. Immagino che questo sia proprio per evitare le condizioni di gara descritte nella documentazione. Credo che sia stato osservato che "più tardi" è il fotogramma successivo, ma potrebbe succedere dopo l'esecuzione di tutti gli altri ActionScript per il fotogramma corrente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top