tictoc例子理解10-13

news2024/11/25 4:48:19

tictoc10-13

    • tictoc 10 几个模块连接,发送消息直到模块3收到消息
    • tictoc 11 新增信道定义
    • tictoc 12 双向连接信息简化定义

tictoc 10 几个模块连接,发送消息直到模块3收到消息

  1. 让我们用几个(n)’ tic’模块让它更有趣,并将每个模块连接到其他模块。
  2. 把它们的工作简单化:模块0生成一条消息,其他模块继续向随机方向传递消息,直到它到达模块2。
    在这里插入图片描述
    ned
simple Txc10
{
    parameters:
        @display("i=block/routing");
    gates:
        input in[];  // declare in[] and out[] to be vector gates
        output out[];
}

network Tictoc10
{
    @display("bgb=226,176");
    submodules:
        tic[6]: Txc10 {
            @display("p=70,76");
        }
    connections:
        tic[0].out++ --> {  delay = 100ms; } --> tic[1].in++;
        tic[0].in++ <-- {  delay = 100ms; } <-- tic[1].out++;

        tic[1].out++ --> {  delay = 100ms; } --> tic[2].in++;
        tic[1].in++ <-- {  delay = 100ms; } <-- tic[2].out++;

        tic[1].out++ --> {  delay = 100ms; } --> tic[4].in++;
        tic[1].in++ <-- {  delay = 100ms; } <-- tic[4].out++;

        tic[3].out++ --> {  delay = 100ms; } --> tic[4].in++;
        tic[3].in++ <-- {  delay = 100ms; } <-- tic[4].out++;

        tic[4].out++ --> {  delay = 100ms; } --> tic[5].in++;
        tic[4].in++ <-- {  delay = 100ms; } <-- tic[5].out++;
}

cc

#include <stdio.h>
#include <string.h>
#include <omnetpp.h>

using namespace omnetpp;

/**
 * Let's make it more interesting by using several (n) `tic' modules,
 * and connecting every module to every other. For now, let's keep it
 * simple what they do: module 0 generates a message, and the others
 * keep tossing it around in random directions until it arrives at
 * module 2.
 * 让我们用几个(n)让它更有趣' tic'模块,并将每个模块连接到其他模块。现在,让我们把它们的工作简单化:模块0生成一条消息,其他模块继续向随机方向传递消息,直到它到达模块2。
 */
class Txc10 : public cSimpleModule
{
  protected:
    virtual void forwardMessage(cMessage *msg);
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
};

Define_Module(Txc10);

void Txc10::initialize()
{
    if (getIndex() == 0) {
        // Boot the process scheduling the initial message as a self-message.启动,将初始消息调度为自消息的进程。
        char msgname[20];
        sprintf(msgname, "tic-%d", getIndex());
        cMessage *msg = new cMessage(msgname);
        scheduleAt(0.0, msg);
    }
}

void Txc10::handleMessage(cMessage *msg)
{
    if (getIndex() == 3) {
        // Message arrived.
        EV << "Message " << msg << " arrived.\n";
        delete msg;
    }
    else {
        // We need to forward the message.
        forwardMessage(msg);
    }
}

void Txc10::forwardMessage(cMessage *msg)
{
    // In this example, we just pick a random gate to send it on.
    // We draw a random number between 0 and the size of gate `out[]'.
    int n = gateSize("out");
    int k = intuniform(0, n-1);

    EV << "Forwarding message " << msg << " on port out[" << k << "]\n";
    send(msg, "out", k);
}

在这里插入图片描述

tictoc 11 新增信道定义

  1. (实现内容同上)让我们用几个(n)’ tic’模块让它更有趣,并将每个模块连接到其他模块。现在,让我们把它们的工作简单化:模块0生成一条消息,其他模块继续向随机方向传递消息,直到它到达模块2。
  2. 信道使用本地信道类型定义,减少连接冗余
types://定义信道
        channel Channel extends ned.DelayChannel {
            delay = 100ms;
        }

ned

simple Txc11
{
    parameters:
        @display("i=block/routing");
    gates:
        input in[];  // declare in[] and out[] to be vector gates
        output out[];
}


//
// Using local channel type definition to reduce the redundancy
// of connection definitions.
//
//使用本地通道类型定义来减少连接定义的冗余。
network Tictoc11
{
    types://定义信道
        channel Channel extends ned.DelayChannel {
            delay = 100ms;
        }
    submodules:
        tic[6]: Txc11;
    connections:
        tic[0].out++ --> Channel --> tic[1].in++;
        tic[0].in++ <-- Channel <-- tic[1].out++;

        tic[1].out++ --> Channel --> tic[2].in++;
        tic[1].in++ <-- Channel <-- tic[2].out++;

        tic[1].out++ --> Channel --> tic[4].in++;
        tic[1].in++ <-- Channel <-- tic[4].out++;

        tic[3].out++ --> Channel --> tic[4].in++;
        tic[3].in++ <-- Channel <-- tic[4].out++;

        tic[4].out++ --> Channel --> tic[5].in++;
        tic[4].in++ <-- Channel <-- tic[5].out++;
}

cc

#include <stdio.h>
#include <string.h>
#include <omnetpp.h>

using namespace omnetpp;

/**
 * Let's make it more interesting by using several (n) `tic' modules,
 * and connecting every module to every other. For now, let's keep it
 * simple what they do: module 0 generates a message, and the others
 * keep tossing it around in random directions until it arrives at
 * module 2.
 * 让我们用几个(n)让它更有趣' tic'模块,并将每个模块连接到其他模块。
 * 现在,让我们把它们的工作简单化:
 * 模块0生成一条消息,其他模块继续向随机方向传递消息,直到它到达模块2。
 */
class Txc11 : public cSimpleModule
{
  protected:
    virtual void forwardMessage(cMessage *msg);
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
};

Define_Module(Txc11);

void Txc11::initialize()
{
    if (getIndex() == 0) {
        // Boot the process scheduling the initial message as a self-message.
        char msgname[20];
        sprintf(msgname, "tic-%d", getIndex());
        cMessage *msg = new cMessage(msgname);
        scheduleAt(0.0, msg);
    }
}

void Txc11::handleMessage(cMessage *msg)
{
    if (getIndex() == 3) {
        // Message arrived.
        EV << "Message " << msg << " arrived.\n";
        delete msg;
    }
    else {
        // We need to forward the message.
        forwardMessage(msg);
    }
}

void Txc11::forwardMessage(cMessage *msg)
{
    // In this example, we just pick a random gate to send it on.
    // We draw a random number between 0 and the size of gate `out[]'.
    int n = gateSize("out");
    int k = intuniform(0, n-1);

    EV << "Forwarding message " << msg << " on port out[" << k << "]\n";
    send(msg, "out", k);
}

在这里插入图片描述
在这里插入图片描述

tictoc 12 双向连接信息简化定义

  1. 使用双向连接进一步简化网络定义
    ned
simple Txc12
{
    parameters:
        @display("i=block/routing");
    gates:
        inout gate[];  // declare two way connections 声明双向连接
}

// using two way connections to further simplify the network definition
//使用双向连接进一步简化网络定义
network Tictoc12
{
    types:
        channel Channel extends ned.DelayChannel {
            delay = 100ms;
        }
    submodules:
        tic[6]: Txc12;
    connections:
        tic[0].gate++ <--> Channel <--> tic[1].gate++;
        tic[1].gate++ <--> Channel <--> tic[2].gate++;
        tic[1].gate++ <--> Channel <--> tic[4].gate++;
        tic[3].gate++ <--> Channel <--> tic[4].gate++;
        tic[4].gate++ <--> Channel <--> tic[5].gate++;
}

cc


#include <stdio.h>
#include <string.h>
#include <omnetpp.h>

using namespace omnetpp;

/**
 * Let's make it more interesting by using several (n) `tic' modules,
 * and connecting every module to every other. For now, let's keep it
 * simple what they do: module 0 generates a message, and the others
 * keep tossing it around in random directions until it arrives at
 * module 2.
 */
class Txc12 : public cSimpleModule
{
  protected:
    virtual void forwardMessage(cMessage *msg);
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
};

Define_Module(Txc12);

void Txc12::initialize()
{
    if (getIndex() == 0) {
        // Boot the process scheduling the initial message as a self-message.
        char msgname[20];
        sprintf(msgname, "tic-%d", getIndex());
        cMessage *msg = new cMessage(msgname);
        scheduleAt(0.0, msg);
    }
}

void Txc12::handleMessage(cMessage *msg)
{
    if (getIndex() == 3) {
        // Message arrived.
        EV << "Message " << msg << " arrived.\n";
        delete msg;
    }
    else {
        // We need to forward the message.
        forwardMessage(msg);
    }
}

void Txc12::forwardMessage(cMessage *msg)
{
    // In this example, we just pick a random gate to send it on.
    // We draw a random number between 0 and the size of gate `gate[]'.
    int n = gateSize("gate");
    int k = intuniform(0, n-1);

    EV << "Forwarding message " << msg << " on gate[" << k << "]\n";
    // $o and $i suffix is used to identify the input/output part of a two way gate
    send(msg, "gate$o", k);
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Android的学生管理系统App设计与实现(Eclipse开发)

目 录 摘 要 I Abstract II 1 绪论 1 1.1 选题背景及意义 1 1.2 研究现状 1 1.2.1 教育系统发展现状 1 1.2.2 手机的应用市场发展现状 1 1.2.3 Android平台介绍 3 1.2.4 Android管理学生信息的意义 5 1.3.3 开发的环境及开发工具介绍 6 1.3 研究主要内容 6 2 相关技术介绍 7 2.…

安装 laravel 遇到的错误和解决方案

安装 laravel 遇到的错误和解决方案 纯粹是为了运行下 laravel&#xff0c;遇到了错误记录下&#xff0c;分享给需要的人。 下载 PHP Windows 版 &#xff0c;我选择的版本是 PHP 7.4 (7.4.33)。下载文件以后找个文件夹解压就可以了。Composer 安装&#xff0c;官网 。 勾选以…

单元测试与数据库

单元测试 1.单元测试应该是全自动执行的,而非交互式的,应使用assert语句来验证结果而不是sout后进行人眼验证 2.为了保证单元测试可靠且便于维护,单元测试用例之间不能互相调用 3.单元测试是可重复执行的,不能受到外界环境的影响 4.单元测试代买必须写在src/test/java的工程…

【JAVA程序设计】基于SpringBoot+VUE的高校疫情打卡系统-前后端分离

基于SpringBootVUE的高校疫情打卡系统零、项目获取一、项目简介二、开发环境三、项目技术四、系统架构五、运行截图六、数据库设计零、项目获取 获取方式&#xff08;点击下载&#xff09;&#xff1a;是云猿实战 项目经过多人测试运行&#xff0c;可以确保100%成功运行。 一…

【C++11重点语法】lambda表达式,初始化列表

目录 引子&#xff1a;C11为什么的源来 语法1&#xff1a;初始化列表 1.2.2 多个对象的列表初始化 语法3&#xff1a;默认成员函数控制&#xff08;delete&#xff0c;default&#xff09; 语法4&#xff1a;lambda表达式 引子&#xff1a;C11为什么的源来 在2003年C标准…

[附源码]计算机毕业设计springboot课室预约系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

用户体验设计笔记(1-1)

前言 ☔️只考虑体验的商业不可持续&#xff0c;只考虑商业的体验没有底线。         ☔️用户体验就是用户使用产品过程中积累起来的主管体验总和。 1 丨商业的天时&#xff1a;如何选择正确的体验策略&#xff1f; ☔️任何产品与服务&#xff0c;都是从用户场景的商业规…

小项目应该如何进行跨平台方案选型

作为一个小开发&#xff0c;近期完整的经历了&#xff0c;一个初创项目从搭建到推向市场的过程。实际上在整个过程中&#xff0c;开发只占很小的一个板块&#xff0c;尤其是对于我司这种初创型企业&#xff0c;人少钱少&#xff0c;每一分都得花到刀刃上&#xff0c;因此产品开…

新零售行业如何玩转线上服务

如今&#xff0c;随着市场的千变万化&#xff0c;企业的商业模式正在不断经历革新。如线上企业不再单纯走电商路线&#xff0c;纷纷进军线下卖场&#xff0c;而传统门店也在寻找线上突围的机会&#xff0c;通过与电商平台合作&#xff0c;开启线上专卖店。线上线下相结合的新零…

WebDAV之葫芦儿·派盘+静读天下

静读天下 支持webdav方式连接葫芦儿派盘。 如今,很多人都喜欢在手机上进行阅读,所以想要获得更好的阅读体验,一款实用的电子书就显得尤为重要了,因此,静读天下这款纯正的本地电子书阅读软件您值得拥有,而且还支持本地电子书备份到葫芦儿派盘。 静读天下是一款备受千万…

实例方法(instance method)、类方法、构造方法(三)

实例方法&#xff08;没有static&#xff09;的概念 对象被称为实例。实例相关的有&#xff1a;实例变量、实例方法。实例变量是对象变量。实例方法是对象方法。实例方法没有static。&#xff08;对象方法&#xff0c;对象级别的方法&#xff09; 实例方法的调用需要先new一个…

详解设计模式:桥接模式

桥接模式&#xff08;Bridge Pattern&#xff09;也称为桥梁模式、接口模式或者柄体模式&#xff0c;有点像适配器模式&#xff0c;也是 GoF 的 23 种设计模式中的一种结构型设计模式。 桥接模式 是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模…

【算法基础】双指针

一、最长连续不重复子序列 给定一个长度为 n 的整数序列&#xff0c;请找出最长的不包含重复的数的连续区间&#xff0c;输出它的长度。 输入格式 第一行包含整数 n。 第二行包含 n 个整数&#xff08;均在 0∼105 范围内&#xff09;&#xff0c;表示整数序列。 输出格式 …

azkaban表project_flows数据分析

project_flows表中数据是怎么存入进去的呢,其中有个JSON字符串是乱码,怎么设置的呢?搜索插入语句地方如下: 查看压缩类型,2为Gzip压缩 public enum EncodingType {PLAIN(1), GZIP(2); 查看flow.toObject方法,其实返回的是一个MAP,定义如下: 查看convertJsonToBytes方…

【毕业设计】20-基于单片机的指纹识别系统设计(原理图工程+源代码工程+实物操作图+答辩论文+答辩PPT)

typora-root-url: ./ 【毕业设计】20-基于单片机的指纹识别系统设计&#xff08;原理图工程源代码工程实物操作图答辩论文答辩PPT&#xff09; 文章目录typora-root-url: ./【毕业设计】20-基于单片机的指纹识别系统设计&#xff08;原理图工程源代码工程实物操作图答辩论文答…

anaconda ( jupyter notebook ) 虚拟环境安装 lazypredict

安装lazypredict 点击 Anaconda Prompt 1.创建虚拟环境 conda create -n py3.9 python3.92.激活虚拟环境 conda activate py3.93.安装lazypredict pip3 install lazypredict0.2.7 numpy pandas tqdm scikit-learn xgboost lightgbm4.安装ipykernel &#xff08;第一次导入…

SpringBoot3.0正式发布,我来尝尝鲜

GraalVM 版本&#xff1a;graalvm-ce-java17-22.3.0 SpringBoot3.0 中最重要的特性就是对 GraalVM 的支持&#xff0c;从而达到更快的启动速度&#xff0c;有两种使用方式。 利用 GraalVM 构建可执行文件 因为需要利用 GraalVM 来打包可执行文件&#xff0c;所以需要你的机器上…

bestphp‘s revenge/ 安洵杯Babyphp(phpsession题目)

目录 [LCTF]bestphp‘s revenge 一.SoapClient 二.CRLF Injection漏洞 简单来说就是&#xff0c;“回车换行”&#xff08;\r\n)的简称。 三、call_user_func 四、PHPsession反序列化 安洵杯Babyphp 第一步 第二步 第三步 最后 [LCTF]bestphp‘s revenge 一.SoapCl…

基于docker创建mysql容器

基础环境 Server: Docker Engine - CommunityEngine:Version: 20.10.9选择镜像 好用、可靠 不好用&#xff1a;DOCKER OFFICIAL IMAGE mysql 好用&#xff1a; VERIFIED PUBLISHER bitnami/mysql 部署容器 创建桥接网络 docker network create app-tier --drive…

java 把a.txt文件中的内容复制到当前项目目录下的b.txt文件中,2种方式比较复制效率 毫秒比较

java 把a.txt文件中的内容复制到当前项目目录下的b.txt文件中&#xff0c;2种方式比较复制效率 毫秒比较 package xxx;import java.io.*; public class JavaApplication1 {public static void main(String[] args) throws IOException {long start System.currentTimeMillis(…