dispatcher.cc

来自「mmk排队论系统的omnet 源码」· CC 代码 · 共 103 行

CC
103
字号
/* * Copyright (C) 2001  by Holger Karl * This file is for internal use only. * * Written by: Holger Karl <karl@ee.tu-berlin.de> * * Time-stamp: <01/05/21 14:32:26 karl> */#include "dispatcher.h"#include "mm1_sim.h"Define_Module (Dispatcher);intDispatcher::findIdleServer(){  int numServers = par("server_number");  int found = 0;  int index = 0;  cMessage *answer;    while ((index < numServers) && (!found))    {      cMessage *request = new cMessage ("check status");       request->setKind (checkStatus);      send (request, "toServer", index);            answer = receiveOn ("fromServer", index);      int answerType = answer->kind();      if (answerType != checkStatusResult)	{	  ev << "findIdleServer did not receive a checkStatusResult";	}      else	{	  int busyState = answer->par("busy");	  if (busyState == 0)	    found = 1;	  else	    index++;	}      delete answer;    }  if (!found)    return -1;  else    return index;}voidDispatcher::activity(){  cMessage *msg;  cQueue queue ("CounterQueue");  cOutVector ql("queue length");  ql.record (0.);      while (1)    {      msg = receive();      int type = msg->kind();            if (type == taskArrives)	{	  // enqueue	  queue.insert (msg);	  // write a statistic:	  ql.record (queue.length());	}      if ((type == taskArrives) || (taskDone))	{	  // anything in queue?	  if (!queue.empty())	    {	      int idleServer = findIdleServer();	      if (idleServer >= 0)		{		  // extract from queue and send to this server		  cMessage *newTask = (cMessage *) queue.pop();		  send (newTask, "toServer", idleServer);		  // write a statistic:		  ql.record (queue.length());		}	    }	}      if (type == taskDone)	delete msg;    }}

⌨️ 快捷键说明

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