Actionscript 3 想要测试精确时间匹配的时间间隔吗

Actionscript 3 想要测试精确时间匹配的时间间隔吗,actionscript-3,apache-flex,Actionscript 3,Apache Flex,我有一个间隔,每3秒运行一次,以检查新数据。如果发现新数据,它将广播dataChange事件,并更新我的项目呈现器 我需要测试一个比较,当两次完全匹配时…仅一次。也就是说,返回的数据是一次会议。会议下午三点开始。运行匹配时,会议将变为蓝色,用户可以进入 当比较的时间匹配时,我广播一个dataChange事件,但我不想重复广播,即 private static const NOW_OFFSET_TIME:Number = 1000 * 60 * 15; private function

我有一个间隔,每3秒运行一次,以检查新数据。如果发现新数据,它将广播dataChange事件,并更新我的项目呈现器

我需要测试一个比较,当两次完全匹配时…仅一次。也就是说,返回的数据是一次会议。会议下午三点开始。运行匹配时,会议将变为蓝色,用户可以进入

当比较的时间匹配时,我广播一个dataChange事件,但我不想重复广播,即

private static const NOW_OFFSET_TIME:Number = 1000 * 60 * 15;

    private function shouldShowNow(start:Date, end:Date):Boolean
    {
        var now:Date = new Date;

        var stime:Number = start.time - NOW_OFFSET_TIME;
        var etime:Number = end.time;

        return ((now.time >= stime) && (now.time <= etime));
    }
…并且dataChange事件被反复运行

但我的间歇时间只有3秒,所以不会出现精确的比赛。见鬼,我甚至把我的间歇时间改为每500毫秒一次,这样就不会被套住了

我的其他选择是什么

谢谢你的帮助

更新:我可以这样做(但我必须每秒运行一次间隔):

下面是完整间隔的处理程序:

/*
                            We want to compare the current upcomingCalendarList collection 
                            against the collection returned; if they are different, update the UI.
                        */
                        var meetingsData:ArrayCollection = new ArrayCollection();
                        meetingsData = getArrayCollectionFromXML( event.result.response.participantMeetingList.meeting );

                        var cachedColl:ArrayCollection = com.fmr.transporter.model.GeneralInfoModel.getInstance().upcomingMeetingList;
                        var returnedColl:ArrayCollection = meetingsData;
                        var updates:Boolean = false; // our flag to let us know if there are changes in the meeting list

                        if( returnedColl != null )
                        {
                            // Meetings have been added/removed
                            if( cachedColl.length != returnedColl.length ){
                                updates = true;
                            }
                            // Look for meeting  updates
                            else
                            {
                                for( var i:int=0;i<cachedColl.length;i++ ){
                                    var currMeeting:MeetingVO = cachedColl[i] as MeetingVO;

                                    for( var j:int=0;j<returnedColl.length;j++ ){
                                        var returnedMtg:ObjectProxy = returnedColl[j];
                                        /*
                                            We want to ensure we're comparing the same meeting (meetingID) for
                                            any changes.
                                        */
                                        if( currMeeting.meetingID == returnedMtg.meetingId )
                                        {
                                            var startTime_GMT:Date = converServerUTCTimeStampToLocalDate( returnedMtg.startTime );
                                            var endTime_GMT:Date = converServerUTCTimeStampToLocalDate( returnedMtg.endTime );

                                            if( ObjectUtil.dateCompare( currMeeting.startTime, startTime_GMT ) != 0 )
                                                updates = true;
                                            else if( ObjectUtil.dateCompare( currMeeting.endTime, endTime_GMT ) != 0 )
                                                updates = true;
                                            else if( currMeeting.meetingName != returnedMtg.meetingName )
                                                updates = true;
                                            else if( this.shouldShowNow( startTime_GMT, endTime_GMT ) )
                                                updates = true;
                                        }
                                    }
                                }
                            }
                            // If there are no updates, leave the cached collections alone. 
                            if( !updates ){
                                return;
                            }
                        }
/*
我们要比较当前upcomingCalendarList集合
针对退回的收款;如果它们不同,则更新UI。
*/
var meetingsData:ArrayCollection=new ArrayCollection();
meetingsData=getArrayCollectionFromXML(event.result.response.participantMeetingList.meeting);
var cachedColl:ArrayCollection=com.fmr.transporter.model.generalinformodel.getInstance().upcomingMeetingList;
var returnedColl:ArrayCollection=会议数据;
变量更新:Boolean=false;//我们的旗帜会让我们知道会议列表中是否有更改
if(returnedColl!=null)
{
//已添加/删除会议
if(cachedColl.length!=returnedColl.length){
更新=真;
}
//查找会议更新
其他的
{

对于(var i:int=0;i来说,您最好向MeetingVO类添加一个属性,以跟踪是否已经显示了它。类似于
public var hasBeenShown:Boolean=false的内容

然后,在you else中,如果您调用shouldShowNow,请将其更新为:

else if (!currMeeting.hasBeenShown && this.shouldShowNow(startTime_GMT, endTime_GMT, currMeeting))
private function shouldShowNow(start:Date, end:Date, meeting:MeetingVO):Boolean
{
    var now:Date = new Date;

    var stime:Number = start.time - NOW_OFFSET_TIME;
    var etime:Number = end.time;

    if((now.time >= stime) && (now.time <= etime)){
        meeting.hasBeenShown = true;
        return true;
    }

    return false;
}
然后在shouldshowNow函数中,将其更新为:

else if (!currMeeting.hasBeenShown && this.shouldShowNow(startTime_GMT, endTime_GMT, currMeeting))
private function shouldShowNow(start:Date, end:Date, meeting:MeetingVO):Boolean
{
    var now:Date = new Date;

    var stime:Number = start.time - NOW_OFFSET_TIME;
    var etime:Number = end.time;

    if((now.time >= stime) && (now.time <= etime)){
        meeting.hasBeenShown = true;
        return true;
    }

    return false;
}
私有函数shouldShowNow(开始:日期,结束:日期,会议:MeetingVO):布尔值
{
var now:日期=新日期;
变量时间:Number=start.time-NOW\u OFFSET\u time;
变量时间:Number=end.time;

如果((now.time>=stime)和(现在。我不能,因为时间间隔会持续运行,以检查除会议开始之外的其他事项,例如,新会议的添加/取消等……啊,那么您的设计有一点缺陷。如果您显示更多的代码,如调用shouldShowNow,那么我可以给您一些提示。您需要在某个地方设置一个标志,以告知您的会议是否成功。)已更新。我用1个解决方案更新了我的原始帖子。这不太好,但可以。但我同意,我认为存在设计缺陷。间隔处理程序比较了两个集合:客户端上的缓存集合和返回的集合。如果集合长度不同,我知道有一个新的/已删除的会议。如果会议的开始时间是现在,我必须更新集合,等等。我现在将添加更多代码。这绝对不是您想要的方式。无法保证它将在100%的时间内工作,因为即使您将间隔设置为1秒,最轻微的性能问题也可能会使它缩短几毫秒您的函数将永远不会返回true。另外,如果用户在适用于此处的第一秒钟后运行软件,该怎么办?显示调用shouldShowNow()的代码也许你会有一个简单的解决方案非常感谢你的回答。我将调整我的代码以使用你的解决方案。如果你让Flash Builder为你制作设置器并检查“分派自定义事件”框,然后FB将添加只允许setter的内部在值发生变化时运行的代码,并且不会在任何其他时间运行。我不想费心查看所有代码,但如果你没有使用setter,你可以调整想法。嗨,艾米,谢谢你的回复。我以前读过你的博客,它非常有用。你能详细说明一下吗请回答?应该通过setter设置哪一部分?可能是您在向会议视图提供信息的数据对象上使用的任何属性,该属性让会议视图知道该属性应变为蓝色。您可以根据需要多次设置该属性,但只有当该属性发生更改时,它才会发送更改事件。如果您没有单独的数据对象,则在您看来,这可能是您的架构缺陷的症结所在。