📄 detection.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 + -