如何在actionscript中同步方法?
问题是我如何阻止一个方法被调用两次,例如,第一次调用没有“完成”,因为它的处理程序正在等待加载url 情况如下:如何在actionscript中同步方法?,actionscript,synchronization,Actionscript,Synchronization,问题是我如何阻止一个方法被调用两次,例如,第一次调用没有“完成”,因为它的处理程序正在等待加载url 情况如下: 我已经编写了一个flash客户端,它使用二进制加密协议与java服务器进行接口(我希望不必重新发明整个客户端/服务器对象通信堆栈,但我必须以这样一种方式对数据进行加密,即使用SSL时,像篡改数据和charles proxy这样的简单工具无法获取数据) API以actionscript swf文件的形式呈现给flas,而API本身是一个单例 api公开了一些简单的方法,包括: 登录()
// class is instantiated through a factory as a singleton
public class API{
var balanceCommunicator:HttpCommunicator = new HttpCommunicator(); // create one for all future calls.
public funciton getBalance(playerId:uint, hander:Fuction):Number {
balanceCommunicator.communicate(...); // this doesnt block
// do other stuff
}
第二次调用是否会导致第一次调用communicator变量?i、 它的行为是否会像静态的一样,因为API对象只有一个副本
如果说GUI上有一个按钮有“update balance”,并且用户一直在点击它,同时调用一个URLLoader complete event hander,它也调用API getBalance()函数(即flash是多线程的)。首先,除了网络API之外,flash不是多线程的。所有ActionScript都在同一个线程中运行 您可以相当容易地创建一个类似信号量的系统,其中每个通信调用都传递一个“键”以及您已经指定的参数。该“键”只是一个字符串,表示您正在进行的调用类型(getBalance、login等)。“键”将是通用对象(对象或字典)中的属性,并将引用一个数组(如果它不存在,则必须创建它) 如果数组为空,则调用将正常进行。如果没有,那么有关调用的信息将被放入一个对象中并推送到数组中。在完成一个调用之后,您的完整处理程序只需检查队列中是否有更多请求,如果有,则将其中一个请求出列并运行该请求 这个系统的一点是,它仍然允许不同类型的请求并行发生——但每个请求都必须有一个新的URLLoader(只要在每个请求完成后清理它,这是完全合理的)
// class is instantiated through a factory as a singleton
public class API{
var balanceCommunicator:HttpCommunicator = new HttpCommunicator(); // create one for all future calls.
public funciton getBalance(playerId:uint, hander:Fuction):Number {
balanceCommunicator.communicate(...); // this doesnt block
// do other stuff
}