/*
* A simple example showing how to use a comms client
*/ #include "MOOS/libMOOS/Comms/MOOSAsyncCommClient.h"
#include "MOOS/libMOOS/Utils/CommandLineParser.h"
#include "MOOS/libMOOS/Utils/ConsoleColours.h"
#include "MOOS/libMOOS/Utils/ThreadPrint.h" MOOS::ThreadPrint gPrinter ( std : : cout ) ;
bool OnConnect(void ∗pParam) {
CMOOSCommClient ∗pC = reinterpret_ cast<CMOOSCommClient∗>(pParam) ;
pC−>Register ( "X" , 0.0 ) ;
pC−>Register ( "Y" , 0.0 ) ;
pC−>Register ( "Z" , 0.0 ) ;
retu rn true ;
}
bool OnMail (void ∗pParam){
CMOOSCommClient *pC = reinterpret _ cast<CMOOSCommClient∗>(pParam );
MOOSMSG_LIST M ; // get the mail
pC−>Fetch (M);
MOOSMSG_LIST : : iterator q ; // p r o c e s s i t
for ( q=M.begin () ; q!=M.end () ; q++){
gPrinter . SimplyPrintTimeAndMessage ( " mail : "+q−>GetSource ( ) , MOOS:: -
ThreadPrint : : GREEN ) ;
}
r etu rn t ru e ;
}
bool funcX ( CMOOSMsg & M , void ∗ TheParameterYouSaidtoPassOnToCallback )
{
gPrinter . SimplyPrintTimeAndMessage ( " c a l l back f o r X" , MOOS : : ThreadPrint : : -
CYAN ) ;
r etu rn t ru e ;
}
bool funcY ( CMOOSMsg & M , void ∗ TheParameterYouSaidtoPassOnToCallback )
{
gPrinter . SimplyPrintTimeAndMessage ( " c a l l back f o r Y" , MOOS : : ThreadPrint : : -
MAGENTA ) ;
r etu rn t ru e ;
}
i n t main ( int argc , char ∗ argv [] ) {
// unde r stand the command l i n e
MOOS : : CommandLineParser P ( argc , argv ) ;
std : : string db_host=" l o c a l h o s t " ;
P . GetVariable ( "−−moos_host" , db_host ) ;
i n t db_port =9000;
P . GetVariable ( "−−moos_port" , db_port ) ;
std : : string my_name =" ex40 " ;
P . GetVariable ( "−−moos_name" , my_name ) ;
// c o n f i g u r e the comms
MOOS : : MOOSAsyncCommClient Comms ;
Comms . SetOnMailCallBack ( OnMail ,&Comms ) ;
Comms . SetOnConnectCallBack ( OnConnect ,&Comms ) ;
// here we add per message c a l l b a c k s
// fi r s t parameter i s the channel nick−name , then the f u n c t i o n
// to c a l l , then a parameter we want passed when c a l l b a c k i s
// invoked
Comms.AddMessageCallback ( " callback_X " , "X" , funcX , NULL ) ;
Comms.AddMessageCallback ( " callback_Y " , "Y" , funcY , NULL ) ;
// start the comms running
Comms . Run ( db_host , db_port , my_name ) ;
// f o r ever loop sending data
std : : vector<unsigned char> X (1000) ;
f o r ( ; ; ) {
MOOSPause (10) ;
Comms.Notify ( "X",X) ; // for callback_X
Comms.Notify ( "Y","This is Y"); // f o r callback_Y
Comms.Notify ( "Z",7.0); //no callb a c k
}
return 0 ;
}

MOOS学习笔记——多线程的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  3. MOOS学习笔记4——独立线程不同回调

    MOOS学习笔记4--独立线程不同回调 /** * @fn 独立线程不同回调 * @version v1.0 * @author */ #include "MOOS/libMOOS/Comm ...

  4. MOOS学习笔记3——命令行

    MOOS学习笔记3--命令行 例程 /** * @code A simple example showing how to use a comms client问问怎么样 */ #include &q ...

  5. MOOS学习笔记2——HelloWorld回调

    MOOS学习笔记2--HelloWorld回调 例程 #include "MOOS/libMOOS/Comms/MOOSAsyncCommClient.h" bool OnConn ...

  6. MOOS学习笔记1——HelloWorld

    MOOS学习笔记1--HelloWorld 例程 /* * @功能:通讯客户端的最简单程序,向MOOSDB发送名为"Greeting" * 数据"Hello", ...

  7. tensorflow学习笔记——多线程输入数据处理框架

    之前我们学习使用TensorFlow对图像数据进行预处理的方法.虽然使用这些图像数据预处理的方法可以减少无关因素对图像识别模型效果的影响,但这些复杂的预处理过程也会减慢整个训练过程.为了避免图像预处理 ...

  8. ffmpeg学习笔记-多线程音视频解码

    之前的视频解码仍然存在问题,那就是是在主线程中去完成解码的,会造成线程阻塞,这里将其改为多线程解码,使其主线程不被阻塞 前面介绍了音视频的主线程解码,那样会阻塞主线程,在前面学习了多线程以后,就可以对 ...

  9. C++学习笔记——多线程(1)

    目前在做推理引擎开发相关的工作,这块内容的话,对工程能力的要求还是比较高的,不再像以前只是写一些Python脚本训训模型就可以了,而且深入了解C++之后,也能感受到Python较C++暴露出的缺点,另 ...

随机推荐

  1. Erlang edoc 多级目录出错

    Erlang edoc 多级目录出错使用rebar doc来生成项目文档.但是当erl源文件目录src下建立子目录,并新建erlang文件后,就无法生成文档. 例如,新建 src/tttt/, 并添加 ...

  2. 从Storm和Spark 学习流式实时分布式计算的设计

    0. 背景 最近我在做流式实时分布式计算系统的架构设计,而正好又要参加CSDN博文大赛的决赛.本来想就写Spark源码分析的文章吧.但是又想毕竟是决赛,要拿出一些自己的干货出来,仅仅是源码分析貌似分量 ...

  3. 【Unity Shaders】Shader学习资源和Surface Shader概述

    写在前面 写这篇文章的时候,我断断续续学习Unity Shader半年了,其实还是个门外汉.我也能体会很多童鞋那种想要学好Shader却无从下手的感觉.在这个期间,我找到一些学习Shader的教程以及 ...

  4. 02_NoSQL数据库之Redis数据库:string类型和hash类型

     Strings类型及操作 String是最简单的类型,一个key对应一个Value,String类型是二进制安全的.Redis的String可以包含任何数据,比如jpg图片或者序列化的对象. S ...

  5. gradle2.0笔记——让项目升级到gradle2.0

    昨晚看到QQ群消息说gradle2.0发布了,今天去看了一下,确实是昨天发布的,为rc版本:Gradle 2.0-rc-2.于是决定试一下. gradle可以在官网上下载,地址如下:http://ww ...

  6. 最简单的基于FFmpeg的内存读写的例子:内存转码器

    ===================================================== 最简单的基于FFmpeg的内存读写的例子系列文章列表: 最简单的基于FFmpeg的内存读写的 ...

  7. 秒懂ASP.NET中的内置对象

    上篇博客,小编主要简单的介绍了一下ASP.NET中的控件,这篇博客,小编主要简单总结一下ASP.NET中的内置对象,七个内置对象分别是:Request.Response.Application.Coo ...

  8. A*寻路算法入门(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  9. TCP/IP入门(4) --应用层

    /** 本篇博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.csdn.net/zjf280441589/article/category/1854365 */ TCP/IP中的 ...

  10. java的map

    Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射. 这里有详细的论述http://www.oracle.com/technetwork/c ...