2017-09-20 10 views
0

Donc, la question est dans le titre. L'application se bloque indépendamment de la plate-forme ciblée lorsque je fais des boucles durables. parti troisième boucles conduisent également à geler:L'application Haxe + OpenFL se fige lorsque des boucles de longue durée sont utilisées

var s:Socket = new Socket(); 
var data:String; 
s.connect(new Host("localhost"), 5000); 
s.waitForRead(); 

Je ne peux pas même une application simple socket, car il est l'idée principale est d'utiliser des boucles de longue durée. Quand je n'utilise pas OpenFL, tout va bien. Dois-je réduire manuellement la charge du processeur dans le cycle et si oui, comment puis-je le faire?

+3

Peut-être que vous bloquez le thread principal (et donc la boucle du jeu/app) avec cet appel 's.waitForRead()'? Si c'est le cas, vous pouvez placer ce code dans un thread séparé ou éviter de bloquer complètement les appels (en interrogeant d'autres boucles ou en utilisant des API basées sur des événements, si votre plate-forme cible les prend en charge). –

+1

@JonasMalacoFilho a raison. AFAIK, OpenFL imite la limite de la boucle de 15 secondes de Flash. –

Répondre

2

openfl.net.Socket est probablement ce que vous cherchez - il étend openfl.events.EventDispatcher, et utilise donc une API basée sur des événements pour le traitement d'écoute/réception de données, etc., de sorte qu'il peut être utilisé sans bloquer le thread principal.

Ainsi, un exemple de la façon dont l'un d'entre eux seraient mis en place, pourrait ressembler à ceci (soulevé de an OpenFL forum post)

socket.addEventListener(Event.CONNECT, onConnect); 
socket.addEventListener(Event.CLOSE, onClose); 
socket.addEventListener(IOErrorEvent.IO_ERROR, onError); 
socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse); 
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecError); 
trace("Connecting to server."); 
socket.connect("52.36.8.250", 443); 

Une chose à surveiller, il semble que le paramètre de listeneraddEventListener est Dynamic -> Void, donc l'utilisation de la valeur transmise au rappel peut être un peu difficile.