📄 epochtimer.java
字号:
package net.tinyos.tinydb;import java.util.*;public class EpochTimer implements Runnable { /** Rate is number of ms per time slot */ public EpochTimer(int rate) { Thread t = new Thread(this); sleepMs = 1000 / rate; int sleepLeftover = 1000 - (sleepMs * rate); sleepExtraEvery = rate / sleepLeftover; this.rate = rate; t.start(); } public void run() { int curInterval = sleepExtraEvery; int extraSleepTime = sleepMs + (sleepExtraEvery > 0?1:0); while (true) { try { if (curInterval-- == 0) { curInterval = sleepExtraEvery; Thread.currentThread().sleep(extraSleepTime); } else { Thread.currentThread().sleep(sleepMs); } for (int i = 0; i < queries.size(); i++) { QueryTimeInfo qif = (QueryTimeInfo)queries.elementAt(i); if (qif != null && qif.slotsLeft-- == 0){ qif.slotsLeft = qif.querySlots; } } } catch (Exception e) { } } } public void addQuery(char qid, int epochDur) { QueryTimeInfo qif = new QueryTimeInfo(); qif.qid = qid; qif.querySlots = epochDur / rate; qif.slotsLeft = qif.querySlots; if ((int)qid >= queries.size()) queries.setSize((int)qid + 1); System.out.println("added query : " + (int)qid); queries.setElementAt(qif, (int)qid); } public short getQueryTimeLeft(int qid) throws NoSuchElementException{ QueryTimeInfo qif = (QueryTimeInfo)queries.elementAt(qid); if (qif == null) throw new NoSuchElementException(); System.out.println(qid + " time left " + qif.slotsLeft); return (short)qif.slotsLeft; } Vector queries = new Vector(); int sleepMs; int sleepExtraEvery; int curInterval; int rate;} class QueryTimeInfo { char qid; int querySlots; int slotsLeft; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -