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

📄 dispatcher.cc

📁 mmk排队论系统的omnet 源码
💻 CC
字号:
/* * 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -