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