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

/**
* @fn 独立线程不同回调
* @version v1.0
* @author
*/ #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 ) ;
return true ;
}
bool OnMail (void *pParam){
CMOOSCommClient *pC = reinterpret_cast<CMOOSCommClient*>(pParam);
MOOSMSG_LIST M ; // get the mail
pC->Fetch (M);
MOOSMSG_LIST::iterator q ; // process it
for ( q=M.begin () ; q!=M.end () ; q++){
//Getsource():返回发布通知的进程名称
//SimplyPrintTimeAndMessage():输出线程安全的格式化信息,第一个参数为要输出的数据
//第二个参数为颜色,默认为NULL
gPrinter.SimplyPrintTimeAndMessage ( "mail:"+q->GetSource(), MOOS::ThreadPrint::GREEN) ;
}
return true;
}
bool funcX (CMOOSMsg &M , void *TheParameterYouSaidtoPassOnToCallback)
{
gPrinter.SimplyPrintTimeAndMessage ( "call back for X" , MOOS :: ThreadPrint::CYAN) ;
return true ;
}
bool funcY ( CMOOSMsg &M , void *TheParameterYouSaidtoPassOnToCallback )
{
gPrinter.SimplyPrintTimeAndMessage ( "call back for Y" , MOOS::ThreadPrint::MAGENTA) ;
return true ;
} int main( int argc , char *argv [] ) {
// understand the commandline
MOOS::CommandLineParser P (argc,argv);
std::string db_host="localhost" ;
P.GetVariable ( "--moos_host" , db_host);
int db_port =9000;
P.GetVariable( "--moos_port" , db_port);
std::string my_name ="ex40" ;
P.GetVariable ( "--moos_name" , my_name) ; // configure the comms
MOOS::MOOSAsyncCommClient Comms;
Comms.SetOnMailCallBack(OnMail ,&Comms) ;
Comms.SetOnConnectCallBack(OnConnect ,&Comms); /**
* @name AddMessageCallBack()
* @fn 加入每一条信息的回调函数
* @param[in]
* 第一个是该channel的别名
* 第二个是回调发生时想要传递的变量
* @note 使用该函数调用该函数指定的,不使用该函数则调用默认的Onmail()
*/
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) ;
// forever loop sending data
std :: vector<unsigned char>X(1000) ;
for ( ; ; ) {
MOOSPause (1000) ;
Comms.Notify ( "X",X) ; // for callback_X
Comms.Notify ( "Y","This is Y"); // for callback_Y
Comms.Notify ( "Z",7.0); //no callback
}
return 0 ;
}

MOOS学习笔记4——独立线程不同回调的更多相关文章

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

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

  2. MOOS学习笔记1——HelloWorld

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

  3. JUC学习笔记——进程与线程

    JUC学习笔记--进程与线程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的进程与线程部分 我们会分为以下几部分进行介绍: 进程与线程 并发与并行 同步与异步 线程详解 进程与线程 ...

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

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

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

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

  6. MySQL学习笔记-数据库后台线程

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

  7. Android学习笔记之ExecutorService线程池的应用....

    PS:转眼间就开学了...都不知道这个假期到底是怎么过去的.... 学习内容: ExecutorService线程池的应用... 1.如何创建线程池... 2.调用线程池的方法,获取线程执行完毕后的结 ...

  8. 学习笔记:java线程安全

    首先得明白什么是线程安全: 线程安全是编程中的术语,指某个函数 (计算机科学).函数库在多线程环境中被调用时,能够正确地处理各个线程的局部变量,使程序功能正确完成. 这是维基百科里的资料,看完后还不是 ...

  9. Node.js学习笔记(3)——关于回调函数和函数的回调

    说明:本人是node.js的初学者,尝试向别人解释这是怎么回事是自我学习的一个好方法.如果你发现有些地方并不是那么正确,欢迎提出来让我知道以便修正,共同进步,谢过^_^.       欢迎交流,本人微 ...

随机推荐

  1. Python模块探秘之EasyGui

    在Windows想用Python开发一些简单的界面,所以找到了很容易上手的EasyGui库.下面就分享一下简单的使用吧. 参考的链接:官网Tutorial 接下来,我将从简单,到复杂一点点的演示如何使 ...

  2. 3.0、Android Studio构建和运行应用

    默认情况下,Android Studio可以通过简单的点击就会将新的项目部署到虚拟机或者物理设备中.在Instant Run的帮助下,你可以将更改的方法或资源文件直接推送到一个运行的app而无需构建一 ...

  3. iOS中 iOS10 权限崩溃问题 韩俊强的CSDN博客

    iOS10 权限崩溃问题 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 今天 手机升级了 iOS10 Beta,然后用正在开发的项目 装了个ipa包,发现点击有 ...

  4. 卸载linux后出现grub rescue怎么办?

    原文转自:http://zhidao.baidu.com/link?url=9e2mOttgV0IJDMml58SFbV-7XOvVzp2jR5l1n3ltFOzX1XAcp5-t-QQPc-Nozy ...

  5. 偏置方差分解Bias-variance Decomposition

    http://blog.csdn.net/pipisorry/article/details/50638749 偏置-方差分解(Bias-Variance Decomposition) 偏置-方差分解 ...

  6. (Tomcat)服务器之web应用的虚拟目录映射和主机搭建

    首先来了解一下web的虚拟目录映射和主机搭建的知识 第一:web的虚拟目录映射 首先我们要知道什么叫做web的虚拟目录映射,这个很好理解的,就是将我们本地硬盘上的web应用映射出一个供外界用户访问的地 ...

  7. 比较ArrayList、LinkedList、Vector

    翻译人员: 铁锚 翻译时间: 2013年12月2日 原文链接: ArrayList vs. LinkedList vs. Vector 1. List概述 List,就如图名字所示一样,是元素的有序列 ...

  8. iOS&nbsp;APP设计规范大全

    目前最为齐全的iOS APP设计规范大全,Mark一个- 欢迎参考本文,未经许可,严禁转载!

  9. DBUtils学习总结

    这几天闲着无聊,就看了一下DBUtils这个数据库组件.中间有了一些想法,现在记录下来. 文章主要分几部分 1 最简单同时也是最经常使用的一些范例 2 学习源码前的一些知识储备 3 我自己写的mydb ...

  10. AngularJS进阶(二十二)实现时间选择插件

    JS实现时间选择插件 引导语 在项目开发过程中,需要实现根据以日期为筛选条件之一,故需要实现时间选择插件.对于未接触的新事物,自己总是感觉不明觉厉.其实,有些实现可以使用很简单的方法即可.以此为例,偶 ...