📄 detection.java
字号:
package test2;
import java.util.LinkedList;
public class Detection implements Runnable{
private WaitQueue waitQueue;
private boolean isStopped=false;
private static Tree atree;
private static double delay=0;
private static long maxsize=0;
private static long resultnum=0;
private long ts;
private long te;
private static double clock=0;
LinkedList<C_Event> cell0=new LinkedList<C_Event>();
LinkedList<C_Event> cell=new LinkedList<C_Event>();
Detection(WaitQueue waitQueue)
{
this.waitQueue=waitQueue;
}
void detect()
{
int n =0;
int size=waitQueue.getsize();
while(!isStopped)
{
if(n==0) {
ts=System.nanoTime()/1000000;
}
P_Event pe=waitQueue.getEvent();
if(pe.gettype()!='D'){
if(pe.gettimestamp()<clock)
{
if(pe.gettimestamp()>clock-Method_update.getK())
{
Method_update.manage(pe,cell);
}
}else{
clock=pe.gettimestamp();
Leaf aleaf=atree.insert(pe);
if(aleaf!=null){
if(aleaf.getmode()==0){
for(int i=0;i<aleaf.getparent().size();i++)
{
active(aleaf.getparent().get(i),aleaf,atree);
}
}
}
}
n++;
}
else
{
te=System.nanoTime()/1000000;
stopDetect();
System.out.println("吞吐率="+((double)size)/(te-ts));
try
{
Thread.sleep(2);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("计算准确率。。。。。。");
Trees.recontruct();
this.setAtree(Trees.roots.get(0));
correct();
System.out.println("吞吐率="+cell.size());
System.out.println("吞吐率="+cell0.size());
System.out.println("准确率="+count());
}
}
}
void active(NonLeaf n,Node n2,Tree atree)
{
C_Event ce=null;
if(n.getoperator().equals(";"))
{
Sequence nn=(Sequence)n;
ce=nn.work(n, n2);
}
if(ce!=null){
long t =System.nanoTime()/1000000;
delay+=t-ce.gett_end();
System.out.println("此刻延迟="+delay);
n.getmid_result().addLast(ce);
if(atree.getRoot()==n)
{
cell.addLast(ce);
resultnum++;
LinkedList<P_Event> pel=ce.getel();
System.out.println("<<<<<<<<<<<<<<<<");
System.out.println();
System.out.println("产生匹配结果:");
for(int j=0;j<pel.size();j++)
{
System.out.print(pel.get(j).gettype());
System.out.print(pel.get(j).gettimestamp()+" ");
}
System.out.println();
System.out.println();
System.out.println(">>>>>>>>>>>>>>>>");
}else{
if(n.getmode()==0){
for(int i=0;i<n.getparent().size();i++)
{
active(n.getparent().get(i),n,atree);
}}/*else{
if(maxsize<getsize()) maxsize=getsize();
System.out.println("此刻内存中存储的最大基本事件个数="+maxsize);
}*/
}
}/*else{
if(maxsize<getsize()) maxsize=getsize();
System.out.println("此刻内存中存储的最大基本事件个数="+maxsize);
}*/
}
void active(NonLeaf n,Node n2)
{
C_Event ce=null;
if(n.getoperator().equals(";"))
{
Sequence nn=(Sequence)n;
ce=nn.work(n, n2);
}
if(ce!=null){
n.getmid_result().addLast(ce);
if(atree.getRoot()==n)
{
long t =System.nanoTime()/1000000;
delay+=t-ce.gett_end();
System.out.println("此刻延迟="+delay);
resultnum++;
cell0.addLast(ce);
LinkedList<P_Event> pel=ce.getel();
System.out.println("<<<<<<<<<<<<<<<<");
System.out.println();
System.out.println("产生匹配结果:");
for(int j=0;j<pel.size();j++)
{
System.out.print(pel.get(j).gettype());
System.out.print(pel.get(j).gettimestamp()+" ");
}
System.out.println();
System.out.println();
System.out.println(">>>>>>>>>>>>>>>>");
}else{
if(n.getmode()==0){
for(int i=0;i<n.getparent().size();i++)
{
active(n.getparent().get(i),n);
}}
}
}
}
public static long getsize()
{
long size=0;
for(int i=0;i<atree.getNodes().size();i++)
{
Node n=atree.getNodes().get(i);
if(n.getisleaf())
{
size=+((Leaf)n).getevents().size();
}else{
for(int j=0;j<((NonLeaf)n).getmid_result().size();j++)
{
size=+((NonLeaf)n).getmid_result().get(j).getel().size();
}
}
}
return size;
}
public void stopDetect()
{
isStopped = true;
}
public void startDetect()
{
isStopped = false;
}
public void run()
{
detect();
}
public WaitQueue getWaitQueue() {
return waitQueue;
}
public static double getClock() {
return clock;
}
public static void setClock(double clock) {
Detection.clock = clock;
}
public static double getDelay() {
return delay;
}
public static void increaseDelay(double delay) {
Detection.delay += delay;
}
public static long getMaxsize() {
return maxsize;
}
public static void setMaxsize(long maxsize) {
Detection.maxsize = maxsize;
}
public static Tree getAtree() {
return atree;
}
public static void setAtree(Tree atree) {
Detection.atree = atree;
}
public static long getResultnum() {
return resultnum;
}
public static void increaseResultnum() {
Detection.resultnum ++;
}
public void correct()
{
for(int i=0;i<waitQueue.getQueueq().size();i++)
{
System.out.println(waitQueue.getQueueq().get(i).gettype());
System.out.println(waitQueue.getQueueq().get(i).gettimestamp());
}
while(waitQueue.getQueueq().size()!=0)
{
P_Event pe=waitQueue.getQueueq().removeFirst();
Leaf aleaf=atree.insert(pe);
if(aleaf!=null){
if(aleaf.getmode()==0){
for(int i=0;i<aleaf.getparent().size();i++)
{
active(aleaf.getparent().get(i),aleaf);
}
}
}
}
}
public double count()
{
int n=0;
for(int i=0;i<cell.size();i++)
{
POINT:for(int j=0;j<cell0.size();j++)
if(cell.get(i).equal(cell0.get(j)))
{
n++;
break POINT;
}
}
if(cell0.size()==0) return 0;
return ((double)n)/cell0.size();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -