⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 detection.java

📁 RFID复杂事件处理系统的研究实验
💻 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 + -