📄 asynctimer.java
字号:
/* * @(#)$Id: AsyncTimer.java,v 1.7 2005/07/09 20:11:14 huebsch Exp $ * * Copyright (c) 2001-2004 Regents of the University of California. * All rights reserved. * * This file is distributed under the terms in the attached BERKELEY-LICENSE * file. If you do not find these files, copies can be found by writing to: * Computer Science Division, Database Group, Universite of California, * 617 Soda Hall #1776, Berkeley, CA 94720-1776. Attention: Berkeley License * * Copyright (c) 2003-2004 Intel Corporation. All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE file. * If you do not find these files, copies can be found by writing to: * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, * Berkeley, CA, 94704. Attention: Intel License Inquiry. */package runtime.services.timer;import java.text.DateFormat;import java.util.Date;import org.apache.log4j.Logger;import runtime.schedulers.ASyncCore;import runtime.schedulers.ASyncCore.TimerCB;import services.Output;import services.timer.Timer;import services.timer.TimerClient;import util.logging.StructuredLogMessage;/** * Class AsyncTimer * */public class AsyncTimer implements Timer, TimerCB { private static Logger logger = Logger.getLogger(AsyncTimer.class); private ASyncCore timerCore; private long timeOffset; private Object syncObject; /** * Constructor AsyncTimer * * @param timerCore * @param beginTime * @param ignoreBeginTime * @param syncObject */ public AsyncTimer(ASyncCore timerCore, String beginTime, boolean ignoreBeginTime, Object syncObject) { this.timerCore = timerCore; if (ignoreBeginTime) { this.timeOffset = System.currentTimeMillis(); } else { try { DateFormat beginDate = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); beginDate.setLenient(true); this.timeOffset = ((Date) beginDate.parseObject(beginTime)).getTime(); } catch (Exception exception) { throw new RuntimeException("TIMER: Unable to parse begin time: " + beginTime + ", " + exception.getMessage()); } } this.syncObject = syncObject; } /** * Method schedule * * @param relativeTime * @param data * @param client */ public void schedule(double relativeTime, Object data, TimerClient client) { double executionTime = relativeTime + getCurrentTime(); ActualTimerEvent event = ActualTimerEvent.allocate(executionTime, data, client); timerCore.register_timer((long) (relativeTime * 1000D), this, event); } /** * Method scheduleMS * * @param relativeTimeMS * @param data * @param client */ public void scheduleMS(long relativeTimeMS, Object data, TimerClient client) { long executionTime = relativeTimeMS + getCurrentTimeMS(); ActualTimerEvent event = ActualTimerEvent.allocate(executionTime, data, client); timerCore.register_timer(relativeTimeMS, this, event); } /** * Method getCurrentTime * @return */ public double getCurrentTime() { return (((double) (System.currentTimeMillis() - timeOffset)) / 1000D); } /** * Method getCurrentTimeMS * @return */ public long getCurrentTimeMS() { return System.currentTimeMillis() - timeOffset; } /** * Method cb * * @param user_data */ public void timer_cb(Object user_data) { Integer eventID = StructuredLogMessage.getReference(); ActualTimerEvent event = (ActualTimerEvent) user_data; // run the event TimerClient client = event.getClient(); if (Output.debuggingEnabled) { logger.debug( new StructuredLogMessage( eventID, "Executing Timer Callback Event", new Object[]{"d", client.getClass().getName()}, new Object[]{ "p", client})); } synchronized (syncObject) { client.handleClock(event.getData()); } if (Output.debuggingEnabled) { logger.debug( new StructuredLogMessage( eventID, "Timer Callback Event Finished", new Object[]{"d", client.getClass().getName()}, new Object[]{ "p", client})); } ActualTimerEvent.free(event); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -