c Message void set Nameconst char name void

  • Slides: 23
Download presentation

Сообщение • • выводится из класса c. Message Некоторые функции void set. Name(const char

Сообщение • • выводится из класса c. Message Некоторые функции void set. Name(const char *name); void set. Kind(short k); void set. Timestamp(simtime_t t); void set. Scheduling. Priority(short p); 7

Пример: клиент-источник запросов class Client : public c. Simple. Module{ c. Message *msg_start =

Пример: клиент-источник запросов class Client : public c. Simple. Module{ c. Message *msg_start = new c. Message( “start”, K_START); c. Message *msg_req = new c. Message( “req”, K_REQ); msg_req->add. Par(“time”); }; void Client : : initialize() { schedule. At(0, msg_start) } 8

Клиент (2) void Gen: : handle. Message(c. Message *m){ msg_req>par(“time”). set. Long. Value(get_req_time(); //

Клиент (2) void Gen: : handle. Message(c. Message *m){ msg_req>par(“time”). set. Long. Value(get_req_time(); // время вып. задания send(msg_req, out); schedule. At (Sim. Time()+get_pause_time(), msg_start); } // номер генератора запросов не учтён! 9

Модель процесса обработки (без планировщика) - 2 case message End: if ( queue. empty()

Модель процесса обработки (без планировщика) - 2 case message End: if ( queue. empty() )state = IDLE; else {message Req = queue. get(); schedule. At (Sim. Time(), message Req ); break; } // case } // handle. Message // написанное курсивом надо доработать!!! 10

Процесс обработки с планировщиком (2) case message cont: if (state == RUN) break; if(state

Процесс обработки с планировщиком (2) case message cont: if (state == RUN) break; if(state == IDLE) if(time_left > 0) {schedule. At( Sim. Time()+time_left, message End); state = RUN; } break; 12

NED: описание простого компонента simple App { parameters: int dest. Address; . . .

NED: описание простого компонента simple App { parameters: int dest. Address; . . . @display("i=block/browser"); gates: input in; output out; } 17

NED: описание составного компонента network Network { submodules: node 1: Node; node 2: Node;

NED: описание составного компонента network Network { submodules: node 1: Node; node 2: Node; node 3: Node; connections: node 1. port++ <--> {datarate=100 Mbps; } <--> node 2. port++; node 2. port++ <--> {datarate=100 Mbps; } <--> node 4. port++; node 4. port++ <--> {datarate=100 Mbps; } <--> node 6. port++; } 18

Процесс обработки с планировщиком • Добавляем вход от планировщика • Сообщения: pause, cont •

Процесс обработки с планировщиком • Добавляем вход от планировщика • Сообщения: pause, cont • Переменная состояния: time_left = 0; • В handle. Message() { case msg_pause: if (state == IDLE) break /* из case */; if( state == RUN){ time_left = msg_end. get. Timestamp()-Sim. Time(); cancel. Event(msg_end); 21 state = IDLE}

Процесс обработки с планировщиком (2) case msg_cont: if (state == RUN) break; if(state ==

Процесс обработки с планировщиком (2) case msg_cont: if (state == RUN) break; if(state == IDLE) if(time_left > 0) {schedule. At( Sim. Time()+time_left, msg_end; state = RUN; } break; 22