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

📄 detection.java

📁 RFID复杂事件处理系统的研究实验
💻 JAVA
字号:
package test1;

import java.util.LinkedList;


public class Detection implements Runnable{
	private WaitQueue waitQueue;
	private boolean isStopped=false;
	private double delay=0;
	private long maxsize=0;
	private long resultnum=0;
	private long ts;
	private long te;
	
	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();		
		Leaf aleaf=Trees.insert(pe);
		if(aleaf!=null){
			if(maxsize<getsize()) maxsize=getsize();
			System.out.println("此刻内存中存储的最大基本事件个数="+maxsize);
		for(int i=0;i<aleaf.getparent().size();i++)
		{
			if(aleaf.getmode(i)){
			active(i,aleaf.getparent().get(i),aleaf);
		    }
		}
		}
		n++;
		if(n==size-1) {
			te=System.nanoTime()/1000000;
			stopDetect();
			System.out.println("吞吐率="+(double)size/(te-ts));
		}
		
		}
	}
	
	void active(int ii,NonLeaf n,Node n2)
	{		
		C_Event ce=null;
		if(n.getoperator().equals(";"))
		{
			Sequence nn=(Sequence)n;
			ce=nn.work(ii,n,n2);
		}else if(n.getoperator().equals("!"))
		{
			NOT nn=(NOT)n;
			ce=nn.work(ii,n,n2);
		}else if(n.getoperator().equals("*"))
		{
			AND nn=(AND)n;
			ce=nn.work(ii,n,n2);
		}else if(n.getoperator().equals("+"))
		{
			OR nn=(OR)n;
			ce=nn.work(ii,n,n2);
		}
		if(ce!=null){
			
		if(Trees.checkisroot(n))
		{
			long t =System.nanoTime()/1000000; 
			delay+=t-ce.gett_end();
			System.out.println("此刻延迟="+delay);
			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(">>>>>>>>>>>>>>>>");	*/
			//处理结果
			//last(ce,Trees.gettree(n));
		}else{
			
				n.getmid_result().addLast(ce);
					
						
			for(int i=0;i<n.getparent().size();i++)
			{
				if(n.getmode(i)){
				active(i,n.getparent().get(i),n);
			    }else{
				if(maxsize<getsize()) maxsize=getsize();
				System.out.println("此刻内存中存储的最大基本事件个数="+maxsize);
			    }
			}
		}
		}else{
			if(maxsize<getsize()) maxsize=getsize();
			System.out.println("此刻内存中存储的最大基本事件个数="+maxsize);
		}
			
	}
	
	public long getsize()
	{
		long size=0;
		for(int i=0;i<Trees.getNodes().size();i++)
		{
			Node n=Trees.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 long getResultnum() {
		return resultnum;
	}
	
	/*public void last(C_Event ce,Tree atree)
	{
		LinkedList<P_Event> pel=new LinkedList<P_Event>();//第一个事件
		
		for(int i=0;i<ce.getel().size();i++)
		{
			int j;
			for(j=0;j<pel.size();j++)
			{
				if(pel.get(j).gettype()==ce.getel().get(i).gettype())
					break;
			}
			if(j==pel.size())
				pel.add(ce.getel().get(i));
		}
		
		for(int i=0;i<pel.size();i++)
		{
			int j;
			for(j=0;j<atree.getLeafnodes().size();j++)//找到此类型事件的叶子结点
			{
				if(pel.get(i).gettype()==atree.getLeafnodes().get(j).gettype())
					break;				
			}
			LinkedList<P_Event> ll=new LinkedList<P_Event>();//存放要删除的 此类型的 事件实例
			ll.add(pel.get(i));
			int kk=ce.getel().indexOf(pel.get(i));//第一个事件在结果中的位置
			for(int ii=kk+1;ii<ce.getel().size();ii++)//加入结果中此类型的其它实例
			{
				if(ce.getel().get(ii).gettype()==pel.get(i).gettype())
					ll.add(ce.getel().get(ii));
			}
			
			//删除叶子结点中这些事件实例
			int k=atree.getLeafnodes().get(j).getevents().indexOf(pel.get(i));//第一个事件在结点中的位置
			
			for(int nn=k,mm=0;nn<atree.getLeafnodes().get(j).getevents().size()&& mm<ll.size();nn++)
			{
				if(atree.getLeafnodes().get(j).getevents().get(nn)==ll.get(mm))
				{
					atree.getLeafnodes().get(j).getevents().remove(nn);
					mm++;
					nn--;
				}
			}
			
			//删除所有父结点中含有这些实例的中间结果
			LinkedList<NonLeaf> fathers=new LinkedList<NonLeaf>();
			fathers=atree.getLeafnodes().get(j).getparent();
			int mn;
			for(mn=0;mn<fathers.size();mn++)
			{
				NonLeaf f;
				f=fathers.get(mn);
				for(int jj=0;jj<f.getmid_result().size();jj++)
				{
					A:for(int m=0;m<ll.size();m++)//含有要删除的实例的一个时就删除此中间结果
						if(f.getmid_result().get(jj).checkhHave(ll.get(m)))
						{
							f.getmid_result().remove(jj);
							jj--;
							break A;
						}
				}
				fathers.addAll(f.getparent());
			}		
		}		
	}*/

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -