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 ;
}

最新文章

  1. PHP控制输出不缓存头
  2. 使用spring提供的LocalSessionFactoryBean来得到SessionFactory
  3. oracle 中触发器增加存储过程commit问题
  4. DDMS无法查看data/data目录?
  5. IOS中延时执行的几种方式的比较
  6. spring mvc出现 Failed to convert property value of type &#39;java.lang.String&#39; to required type &#39;java.util.Date&#39; for property &#39;endtime&#39;
  7. Oracle数据库SQL优化
  8. Unity 打包完太大
  9. find the mincost route(floyd变形 无向图最小环)
  10. LeetCode_Combinations
  11. JAVA Socket无参构造方法的使用
  12. c printf()详解[转载]
  13. input type=&quot;hidden&quot; js获取不到值(document.getelementbyid OR $(#).val())
  14. 记录Django学习1
  15. Hibernate查询部分字段并封装到指定类中
  16. [LeetCode&amp;Python] Problem 226. Invert Binary Tree
  17. 一篇对OAuth2.0开发实例的介绍
  18. C#单例类的实现
  19. android手机安全:被攻陷的一个场景
  20. Diamond 3.5简易教程(一)------工程的建立

热门文章

  1. C++对象模型的那些事儿之三:默认构造函数
  2. 深入浅出Java Dom4j读取XML
  3. UNIX网络编程——socket概述和字节序、地址转换函数
  4. 并发编程(三): 使用C++11实现无锁stack(lock-free stack)
  5. Ubuntu文件中文乱码
  6. Cocos2D中使用CCDrawNode绘制几何图形崩溃的解决
  7. Awards and Certifications @EMC
  8. 02_Android写xml文件和读xml文件
  9. Dynamics CRM OData 查询超过50条记录的数据(Retrieving More than 50 records using OData)
  10. 如何运行 rpcz python example