找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 7913|回复: 3

ACE关于串口通信的反应器

[复制链接]
发表于 2012-10-21 12:31:36 | 显示全部楼层 |阅读模式
请问我使用ACE编写了一个串口通信程序,使用了反应器,但是问题是有数据发过来input_handle方法始终不会被调用是怎么回事?
代码如下:
#include "ace/Connector.h"
#include "ace/DEV_Addr.h"
#include "ace/DEV_Connector.h"
#include "ace/TTY_IO.h"
#include "ace/Reactor.h"
#include "ace/Svc_Handler.h"
#include <iostream>
typedef ACE_Connector<MyHandler,ACE_DEV_CONNECTOR> MyConnector;
class MyHandler:public ACE_Svc_Handler<ACE_DEV_STREAM,ACE_NULL_SYNCH>
{
private:
//ACE_TTY_IO recv;
char sizeBuffer[10];
public:

MyHandler()
{
  ACE_TTY_IO::Serial_Params S_Params;
  S_Params.baudrate = 9600;
  S_Params.xonlim = 0;
  S_Params.xofflim = 0;
  S_Params.readmincharacters = 0;
  S_Params.readtimeoutmsec = 1000;
  S_Params.parityenb = true;
  S_Params.paritymode = "EVEN";
  S_Params.ctsenb = false;
  S_Params.rtsenb = false;
  S_Params.xinenb = false;
  S_Params.xoutenb = false;
  S_Params.modem = false;
  S_Params.rcvenb = true;
  S_Params.dsrenb = false;
  S_Params.dtrdisable = false;
  S_Params.databits = 8;
  S_Params.stopbits = 1;
  //S_Params.parityenb = true;  //奇偶校验
  this->peer().control(ACE_TTY_IO::SETPARAMS,&S_Params);
}
int open(void*)
{
  ACE_DEBUG((LM_ERROR,"COM OPEN"));
  this->peer().send("hello",sizeof("hello"));
  ACE_Reactor::instance()->register_handler(this,ACE_Event_Handler::READ_MASK);
  return 0;
}
int handle_input(ACE_HANDLE)
{
  if(this->peer().recv(sizeBuffer,sizeof(sizeBuffer)) < 0)
   ACE_DEBUG ((LM_ERROR,ACE_TEXT("%p\n")));
  else
   ACE_DEBUG ((LM_ERROR,ACE_TEXT("Receive:%s\n"),sizeBuffer));
  return 0;
}
};
int main(int argc,char* argv[])
{
MyConnector conn;
MyHandler *eh = new MyHandler;
ACE_DEV_Addr comaddr("COM1");
if(conn.connect(eh,comaddr) < 0)
   ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("Connect Error!")),
                      1);
ACE_Reactor::instance()->run_reactor_event_loop();
return 0;
}
发表于 2012-10-21 19:14:26 | 显示全部楼层
ACE_Reactor::instance()->register_handler(this,ACE_Event_Handler::READ_MASK);
我没在串口上面用过这个系统,但这句决定了反应器的行为,请检索和尝试变更掩码参数试试看。

点评

我试了其他掩码也不行,不知道串口上是怎么使用反应器接受数据的,有高手解决下吗  详情 回复 发表于 2012-10-21 23:02
 楼主| 发表于 2012-10-21 23:02:39 | 显示全部楼层
winston 发表于 2012-10-21 19:14
ACE_Reactor::instance()->register_handler(this,ACE_Event_Handler::READ_MASK);
我没在串口上面用过这个 ...

我试了其他掩码也不行,不知道串口上是怎么使用反应器接受数据的,有高手解决下吗
发表于 2012-11-15 06:00:04 | 显示全部楼层

moving this->peer().control(ACE_TTY_IO::SETPARAMS,&S_Params); after register_handler;
should fix the issue
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 16:34 , Processed in 0.015485 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表