传感器仿真平台——多线程与单步(六)

这个模块并没有被包括到整个平台框架中去,而是以工具的形式被放在一边。不过该模块的加入可以极大的提高仿真实验的直观性。(权当是熟悉多线程了,哈哈!)

仿真平台想要实现多线程运行和单步,并且希望结构尽量简单。这里需要说明,单步不仅仅是使用Thread.Stop()将线程中断,而是在某一次步骤执行完时非暴力的让其停止下来。

如上图所示,MutiThreadHelper需要加载数据,包括环境配置数据(Config)、实验数据(Hashtable)等,接下来就会有三个函数:

——start用于开始开始线程

——step用于单步

——stop用于停止线程,与start相对于,注意是非暴力式停止!



这里我一直提到非暴力停止,大致的结构应该是这样:

int bStop;//0表示线程结束,1表示线程继续,2表示线程挂起

void start()
{
    bStop = 1;
    Thread.Start();
}
void step()
{
    bStop = 2;
    if(Thread.State==Suspend)
    {
        Thread.Resume();
    }
    else if(Thread.State!=Run)
    {
        Thread.Start();
    }
}
void stop()
{
    bStop = 0;
}
void doWork()
{
    //do something
    if (bStop == 0)
    {
        Thread.Stop();
    }
    else if (bStop == 2)
    {
        Thread.Suspend();
    }
}

注意上面是伪代码,并不属于任何一种语言。大致的思想是,通过一个变量管理线程函数的运行,当线程没执行一步,就会对该变量进行检查,并做出相应的变化。

时间: 2024-07-29 18:22:04

传感器仿真平台——多线程与单步(六)的相关文章

传感器仿真平台——平台与算法接口(五)

传感器仿真平台希望做的是简化传感器仿真时,对于前台窗口.参数管理.UI绘制和数据收集等方面的操作,使得使用者有更多的时间去关心算法的实现而非其他繁杂琐事.所以说平台与算法的接口是重点.写的好,表示框架的通用性就好,不然等于是废了. 定义如上图,设置一个Method接口,他需要使用算法必须的配置参数表和回调函数作为参数初始化. process表示仿真实验的运行,这里设定输入参数为实验所需的传感器的参数. 这里或许会有疑问,数据运行结果怎么给出呢?请看回调函数,Callback其实是一个函数指针,实

传感器仿真平台——数据生成模块(三)

数据生成模块有下面这样一种情况: 对于不同的传感器仿真实验,所使用的数据类型,数据数量不一样. 如实验一是进行最大覆盖率实验,则他需要的数据格式可能是如下所示: 1 Class Sensor 2 { 3 public int x; 4 public int y; 5 public double direction; //方向 6 public double sweep;//扇形大小 7 } 实验二进行的是信号强度实验,则他可能还需要一个用来作为覆盖物的目标,如下: 1 Class Target

传感器仿真平台——UI绘制模块(二)

这一章讲的是UI绘制模块 该模块的作用是将实验对象绘制出来,它可能是目标.传感器等等,由于事先并不知道会有哪些物体,也无法事先定义好某个对象该怎么画,以我懒人的性格,得了,就抛给用的人吧~喝前摇一摇,大家自己画自己. 具体设计如下图: 这个模块主要包括两个部分. 第一个是一个接口,IDrawSelf定义了一个方法,叫做DrawSelf(画自己?),任何使用UI绘制模块的类都需要对该接口进行实现,某个类自己画出自己. DrawBoard是一个自定义控件类,它通过ReDraw方法接收一系列的(知道怎

传感器仿真平台——实验环境配置(四)

实验环境配置,最初的想法是这样: 要有一个类,专门管理各种各样的实验环境参数,如场地长.宽等,为了方便起见,可以在该类的构造函数中进行文件读取,将外部xml作为配置文件加载各类参数.这样的话,使用的时候就可以如下这么做: Config config = new Config();//这个是我说的环境配置管理类 var width = config.width; 但是对于框架来说,这个方法看似好用,实际上却很难做到,为什么?参数不确定呀,不同的实验有不同种类的参数,实验一的参数是长.宽.实验二的是

七种仿真平台

1 主要介绍以下七种仿真平台(侧重移动机器人仿真而非机械臂等工业机器人仿真): 1.1 USARSim-Unified System for Automation and Robot Simulation USARSim是一个基于虚拟竞技场引擎设计高保真多机器人环境仿真平台.主要针对地面机器人,可以被用于研究和教学,除此之外,USARSim是RoboCup救援虚拟机器人竞赛和虚拟制造自动化竞赛的基础平台.使用开放动力学引擎ODE(Open Dynamics Engine),支持三维的渲染和物理模

微信公众平台开发教程(六)获取个性二维码

微信公众平台开发教程(六)获取个性二维码 一.功能介绍 在进行推广时,我们可以告诉对方,我们的微信公众账号是什么,客户可以去搜索,然后关注.二维码给我们提供了极大的便捷,只要简单一扫描,即可关注. 如果已经关注过,立刻跳入对话画面.在我们进行推广时,不再是简陋的文字,可以是一个有个性的二维码,想必会很生动. 微信对二维码提供了很好的支持,而且还可以根据需要生成不同场景的二维码.下面我们将介绍如何获取和使用二维码. 注意:限服务号,且进行了微信认证,费用300 二.相关接口 为了满足用户渠道推广分

【VMCloud云平台】SCCM(六)客户端硬件、软件资产管理

继上一篇云平台完成SCCM部署篇之后,SCCM篇正式开始,今天将开始介绍SCCM主要功能--客户端硬件.软件资产管理(紫色为完成实施,红色为实施中): 1. 点击管理: 2. 点击客户端设置: 3. 右键客户端默认设置,开启硬件清单: 4. 设置需要收集的类(当然也可以自已导入mof模板进行额外的硬件收集): 5. 点击确定后,点击软件清单,开启收集: 6. 设置收集的类型为.exe: 7. 确认设置后点击确定(设置计划): 8. 回到客户端符合性页,点击其中一台设备,右键启动-资源浏览器: 9

秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5136035 转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8646902 欢迎关注微博:http://weibo.com/MoreWindows 在<秒杀多线程系列>的前十五篇中介绍多线程的相关概念,多线程同步互斥问题<秒杀多

Modelsim的自动化脚本仿真平台

自动化仿真平台由tcl语言搭建,大规模设计使用此平台让仿真便捷不少.大体上用tcl语言进行modelsim仿真的流程如下: 1. 建立库 2. 映射库到物理目录 3. 编译源代码 4. 启动仿真器 5. 执行仿真 tcl语言的语法 vlib :建立库.格式 vlib<library name> .库名缺省值是work vmap:映射逻辑库名,将逻辑库名映射到库路径.语法格式vmap work <library name> vdir:显示指定库内容.语法格式vdir –lib <