4、相关数据结构与API

struct _pulse {
uint16_t type;
uint16_t subtype;
int8_t code;
uint8_t zero [3];
union sigval value;
int32_t scoid;
};

  value是一个联合体

union sigval {
int sival_int;
void *sival_ptr;
};
int MsgReceivePulse (int chid,
void *rmsg,
int rbytes,
struct _msg_info *info);

  五、异步消息

  1、异步信号常用API

asyncmsg_channel_create()
asyncmsg_channel_destroy()
asyncmsg_connect_attach()
asyncmsg_connect_detach()
asyncmsg_flush()
asyncmsg_put(),
asyncmsg_get()
asyncmsg_free()
asyncmsg_malloc()

  2、API说明

int asyncmsg_channel_create (
unsigned flags,
mode_t mode,
size_t buffer_size,
unsigned max_num_buffer,
const struct sigevent *ev,
int (*recvbuf_callback) (
size_t bufsize,
unsigned num_bufs,
void *bufs[],
int flags,
void *handle ),
void *recvbuf_callback_handle );

  Flags:描述频道属性,默认设置_NTO_CHF_ASYNC,如果设置_NTO_CHF_ASYNC_NONBLOCK

  那么程序在调用asyncmsg_get()的时候如果没有消息到来将不会阻塞。

  Mode:设置频道属性

  Buff_size:设置存放消息的缓冲的大小

  Max_num_buffer:设置存放消息的缓冲区大个数

  Ev:NULL或者一个指向sigevent结构体的指针,用于指定一个事件,当有消息可以被接收的时候这个事件自动发送

  Recvbuf_callback:NULL或者一个函数指针,用于分配空间存放接收的消息为NULL时候用Malloc

  recvbuf_callback_handle:传递给Recvbuf_callback函数。

  说明:

  当Recvbuf_callback不为NULL的时候:

  每当调用一次asyncmsg_get()的时候触发一次回调函数(flags设置为ASYNCMSG_RECVBUF_ALLOC,bufs指向消息...)当希望接收其他消息的时候返回1,返回0停止。

  调用 asyncmsg_channel_destroy()的时候,回调函数被触发多次用于释放空间,flags设置为ASYNCMSG_RECVBUF_FREE。

  int asyncmsg_channel_destroy( int chid );

  chid :频道ID

  说明:

  当Recvbuf_callback不为NULL的时候,每次调用会触发释放空间,默认调用free。

  返回值:

  成功:EOK

  失败:-1 ->errno

int asyncmsg_connect_attach (
uint32_t nd,
pid_t pid,
int chid,
unsigned index,
unsigned flags,
const struct _asyncmsg_connection_attr * attr);

  参数说明:

  Nd/pid/chid:哪台电脑/进程ID/频道ID

  index:低可接受的连接ID(起始值)

  Flags:

  _NTO_COF_NOSHARE:应用程序使用自己的BUFFER,否则使用asyncmsg_malloc(),填充数据调用asyncmsg_put()的时候发送。

  _NTO_COF_NONBLOCK:不用阻塞等待,当发送头部忙的时候