MOOS学习笔记4——独立线程不同回调
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——独立线程不同回调的更多相关文章
- MOOS学习笔记2——HelloWorld回调
MOOS学习笔记2--HelloWorld回调 例程 #include "MOOS/libMOOS/Comms/MOOSAsyncCommClient.h" bool OnConn ...
- MOOS学习笔记1——HelloWorld
MOOS学习笔记1--HelloWorld 例程 /* * @功能:通讯客户端的最简单程序,向MOOSDB发送名为"Greeting" * 数据"Hello", ...
- JUC学习笔记——进程与线程
JUC学习笔记--进程与线程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的进程与线程部分 我们会分为以下几部分进行介绍: 进程与线程 并发与并行 同步与异步 线程详解 进程与线程 ...
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
- MOOS学习笔记3——命令行
MOOS学习笔记3--命令行 例程 /** * @code A simple example showing how to use a comms client问问怎么样 */ #include &q ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
- Android学习笔记之ExecutorService线程池的应用....
PS:转眼间就开学了...都不知道这个假期到底是怎么过去的.... 学习内容: ExecutorService线程池的应用... 1.如何创建线程池... 2.调用线程池的方法,获取线程执行完毕后的结 ...
- 学习笔记:java线程安全
首先得明白什么是线程安全: 线程安全是编程中的术语,指某个函数 (计算机科学).函数库在多线程环境中被调用时,能够正确地处理各个线程的局部变量,使程序功能正确完成. 这是维基百科里的资料,看完后还不是 ...
- Node.js学习笔记(3)——关于回调函数和函数的回调
说明:本人是node.js的初学者,尝试向别人解释这是怎么回事是自我学习的一个好方法.如果你发现有些地方并不是那么正确,欢迎提出来让我知道以便修正,共同进步,谢过^_^. 欢迎交流,本人微 ...
随机推荐
- 18 UI美化状态集合的位图selector
当我们某个控件 想在不同状态下显示不同的背景图的需求 如我们需要按钮在正常状态显示一种图 按下显示另一背景图 或者单选框被选中时是一种显示图片 没选中是另一种背景图 例子 按钮在不同状态显示不同的背景 ...
- Servlet之Session处理
HttpSession 对象中可用的几个重要的方法: 1 public Object getAttribute(String name) 该方法返回在该 session 会话中具有指定名称的对象 ...
- Cocos2D实现RPG游戏人物地图行走的跟随效果
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在一些RPG游戏中,人物队列在地图中行走的时候有时需要实现一个 ...
- 登录ssh时Host key verification failed错误
工作中总是测试不同的路由设备, 路由器的ip都是 192.168.111.1 ,ssh登录的时候总是出现这个错误. macos上,错误如下 spawn ssh -p 22 root@192.168.1 ...
- 【一天一道LeetCode】#117. Populating Next Right Pointers in Each Node II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...
- React Native控件只TextInput
TextInput是一个允许用户在应用中通过键盘输入文本的基本组件.本组件的属性提供了多种特性的配置,譬如自动完成.自动大小写.占位文字,以及多种不同的键盘类型(如纯数字键盘)等等. 比如官网最简单的 ...
- “XcodeGhost”病毒之后,苹果更应注…
虽然大家都在期待中秋假期的到来,不过让开发者挺闹心的一件事就是这几天网上.朋友圈以及各种群中炒得沸沸扬扬的"XcodeGhost"病毒事件,就连央视也惊动了!! 事件起源 事件起源 ...
- 使用百度地图开发一个导航定位demo-android学习之旅(77)
首先介绍如何导入百度地图 步骤(其实官方文档写的很清楚了)http://developer.baidu.com/map/index.php?title=androidsdk/guide/introdu ...
- 关于Android自定义view 你所需要知道的基本函数
开始时之前想吐槽一句..iphone的闹钟,12小时制.我成功的把闹钟订到了下午5:00 导致错过一班飞机.心疼改签费. 候机ing,没有事做,来写一下学习自定义view必须掌握的基本函数.这里只挑一 ...
- 配置hadoop-1.2.1 eclipse开发环境
写这篇文章的目的是记录解决配置过程中的问题 首先我们先看下这篇博文 配置hadoop-1.2.1 eclipse开发环境 但是在[修改 Hadoop 源码]这里,作者发布的 hadoop-core-1 ...