/*
* 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. 1081. Rational Sum (20) -最大公约数

    题目如下: Given N rational numbers in the form "numerator/denominator", you are supposed to ca ...

  2. 剑指Offer——网易笔试之不要二——欧式距离的典型应用

    剑指Offer--网易笔试之不要二--欧式距离的典型应用 前言 欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的 ...

  3. Oracle启用scott用户

    先查询一下目前数据库是否有scott用户 select username,account_status from dba_users where username like '%SCOTT%'; 如果 ...

  4. SVM及其c++代码运用实例

    最近做个小东西,要用到SVM,搜索网上,发现大伙都是各种介绍理论,让我等小码农晕头转向,是故自己学习总结一下,并将代码实例展示出来,方便大家共同探讨,该代码是用opencv编写的,很容易学习滴. 1. ...

  5. iOS中大流中的自定义cell 技术分享

    AppDelegate.m指定根视图 self.window.rootViewController = [[UINavigationController alloc] initWithRootView ...

  6. cocos2d-x初探

    今天把cocos2d-x下载下来装了准备试试. 就不用windows本了,主要想做iOS游戏,所以这里用mac. 先在http://cocos2d-x.org/download下载右边的cocos,然 ...

  7. Linux IPC实践(2) --匿名PIPE

    管道概念 管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的一个数据流称为一个"管道", 管道的本质是固定大小的内核缓冲区; 如:ps aux | gre ...

  8. 三层登录实例VB.NET版详解---理论加实战篇

    层,百度百科这样解释,首先-重叠起来的东西:重叠起来的东西中的一部分:层次|表层|大气层.其次-重叠:重复:层峦叠嶂|层出不穷.最后-量词,用于可以分出层次的事物,女孩儿强烈的第六感,三层中的层一定是 ...

  9. 【算法导论】最小生成树之Prime法

    关于最小生成树的概念,在前一篇文章中已经讲到,就不在赘述了.下面介绍Prime算法:         其基本思想为:从一个顶点出发,选择由该顶点出发的最小权值边,并将该边的另一个顶点包含进来,然后找出 ...

  10. 使用GDAL将下载的Google卫星图像转为带坐标的tif

    网上有很多下载Google地图的卫片的软件,一般下载下来的图像都是jpg格式的,另外附带一个坐标信息的描述文件.这样的数据不能直接拿来在遥感或者GIS软件中使用,因为图像里面没有投影和坐标信息,所以就 ...