- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 OMNET++ 中编写了一个简单的多线程应用程序,它不会在工作线程中调用任何 OMNET++ API 并且按预期工作。我知道 OMNET++ 在设计上不支持多线程应用程序,但我想知道是否有任何机制可以用来在我的工作线程和主模拟线程中的代码之间建立桥梁。
更具体地说,我将一些数据保存在工作线程中的向量中,并且我想在模拟线程中向代码发出信号以使用它(生产者/消费者场景)。有什么办法可以做到这一点?
我需要设计自己的事件调度器吗?
最佳答案
方法一
实现目标的最简单方法是在模拟线程中使用自消息和对工作线程的小修改。工作线程应该修改一个公共(public)变量(两个线程都可见)。并且selfmessage应该定期检查这个变量的状态。
这个想法的示例代码:
// common variable
bool vectorReady;
// worker thread
if (someCondition) {
vectorReady = true;
}
// simulation thread
void someclass::handleMessage(cMessage * msg) {
if (msg->isSelfMessage()) {
if (vectorReady) {
vectorReady = false;
// reads vector data
}
scheduleAt(simTime() + somePeriod, msg);
}
OMNeT++
使用
cSequentialScheduler
调度器。它有方法
takeNextEvent()
调用它来获取下一个事件。您可以创建派生类并覆盖此方法,例如:
// cThreadScheduler.h
#include <omnetpp.h>
using namespace omnetpp;
class cThreadScheduler : public cSequentialScheduler {
public:
virtual cEvent *takeNextEvent() override;
};
// cThreadScheduler.cc
#include "cThreadScheduler.h"
Register_Class(cThreadScheduler);
cEvent* cThreadScheduler::takeNextEvent() {
if (vectorReady) {
vectorReady = false;
// reads vector data
}
return cSequentialScheduler::takeNextEvent();
}
omnetpp.ini
添加一行:
scheduler-class = "cThreadScheduler"
关于multithreading - 从工作/子线程访问主 OMNET++ 模拟线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45849770/
我正在创建自己的有线仿真模型,其中节点具有分层架构。 应用层周期性的生成数据包,然后使用 scheduleAt(simTime() + 0.00000000625,AppModuleSelfTrigg
我是 omnet++ 的新手,我需要安装 Veins。我正在按照网站上的教程进行操作,但遇到了一些麻烦。 我在 Windows 8.1 上运行 omnet 5.1.1 和 veins 4.6,当我构建
我已经按照教程步骤使用 sumo 0.29 和 Omnet++ 5.1 安装了适用于 Windows 的 Veins 4.5,一切都很好,直到我不得不在 Omnet++ 中构建 Veins。我遇到的唯
大家好 我有两个关于 OMNET++ 输出结果的问题 1- 我有一个在 VANET 网络中使用 AODV 路由协议(protocol)的模拟,但是当我为这个模拟记录 pcap 时,它显示为损坏或损坏,
我是 VEINS 的新手。我可以在 Veins 中运行相扑模拟,但不知道如何在汽车之间进行通信或传递消息。有人可以帮忙吗? 最佳答案 Veins 教程中使用的演示场景正是这样做的。您可以在 the V
NED 文件: import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator; import inet.physicallaye
我已经安装了 veins 4.7,并且完成了教程。一切正常。现在我构建了一个更像 DemoBaseApplLayer 的新模块。该模块继承自 BaseAppLayer。在初始化方法中,我调用了一个 d
要启动任何静脉模拟,使用 veins_launchd 守护进程。它基本上获取 sumo 配置文件,找到一个未使用的端口,启动 sumo 并桥接 sumo 和 OMNet++ 之间的连接。现在这是一个基
我和我的 friend 要开始一个项目。我们将模拟服务器和客户端之间的基本通信。我们有一个要实现的伪代码。使用这种通信,我们将尝试以不同的方式检测通信中的故障。我们都是这两种软件的新手,所以想就我们应
我正在使用 veins、sumo 和 omnetpp 进行交通模拟。该 ide 运行良好了数周,然后突然无法初始化模拟并卡在(我的控制台窗口) Starting... $ cd /home/gopal
我是 OMNet++ 的新手,我正在尝试探索 INeT 框架中可用的示例和功能。那么我如何基于这个框架创建一个新项目呢?以及如何从不同的项目导入某些模块。 谢谢 最佳答案 只需创建一个新项目,右键单击
我想设置warmup-period作为我在模拟中需要的一些参数的总和。我写了这个,但我总是得到一个语法错误或解析错误 **.airspace.interArrivalTime = ${iat = 15
我是 omnet++ 的新手,发现了一些困难。我的代码没问题,但问题是 g++ 和 gcc 未在 PATH 中找到。我不知道为什么会出现这个问题。提前致谢。 最佳答案 从主 OMNeT++ 目录启动
我用相扑来模拟高速公路场景和车辆移动,如何得到网络报文的模拟,以及如何获得“报文投递率”等性能指标?需要测量相关的性能指标,以及如何从代码中获取它们如何获得网络报文模拟,以及如何获得报文投递率等性能指
我正在 omnet++ 中构建自己的复合模块,其中包含多个简单模块并具有分层架构。但是在模块间通信中仅使用 send()(就像我的 App 生成器使用 send() 将数据包发送到下方缓冲区)似乎增加
我正在做一个使用 802.11p 改善公共(public)汽车运输时间的项目。目前,我制作并模拟了一个 SUMO 模型,我正在继续使用 Omnet++ 和 Veins 对网络进行建模。我已经完成了 T
我正在学习 R 并学习了这个名为 RInside 的软件包它提供了 c++ 类来调用嵌入式 R 解释器。根据 this blogpost 配置后,我能够运行一些给出的示例并在 Omnet++ ecli
如何将消息从一个RSU发送到另一个RSU?在默认示例中,我使用的是5.2版的静脉,我只是多添加了一个RSU(一个非常接近另一个)。我可以使用sendDown()或sendDelayedDown()方法
我正在尝试为 MANET 网络创建简单的无线节点,它可以将消息发送到范围内的其他节点。在 INET 中实现的解决方案还包含我不需要的其他层,如 IP、传输、应用程序。 我是 omnet++ 的新手,所
我是 omnetpp 的初学者。 我必须使用 inet 在 omnet 中创建一个车辆,然后通过 veins 将其连接到 sumo 我该如何开始我的项目。 最佳答案 Veins 4.7.1 附带一个名
我是一名优秀的程序员,十分优秀!