使用 long-lasting 循环时 Haxe+OpenFL 应用程序冻结

Haxe+OpenFL app freezes when long-lasting loops used

所以,问题在标题中。当我进行 long-lasting 循环时,无论目标平台如何,应用程序都会冻结。 第三方循环也导致卡顿:

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

我什至不能制作一个简单的套接字应用程序,因为它的主要思想是使用 long-lasting 循环。当我不使用 OpenFL 时,一切正常。我应该手动减少循环内的 CPU 负载吗?如果是,我该怎么做?

openfl.net.Socket is probably what you're looking for - it extends openfl.events.EventDispatcher,因此利用基于事件的 API 来处理 listening/receiving 数据等,因此可以在不阻塞主线程的情况下使用 .

因此,关于如何设置其中之一的示例可能看起来像这样(摘自 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);

需要注意一件事,addEventListenerlistener 参数似乎是 Dynamic -> Void,因此使用传递给回调的值可能有点棘手。