QNX中使用name_attach()和name_open()函数来实现两个线程间的通信

#define A_TO_B 1
unsigned long dataitem;

//服务器端线程
void *Data_handle_thread(void*arg)

{

//设置线程优先级
    setprio(0,20);


rcvid = MsgReceive(m_datahandle_attach->chid, &smsg, sizeof(SEND_MSG ), NULL );

if (rcvid==0)//=0表示收到pulse,>0表示收到message
{
    item = smsg.hdr.code;
    dataitem = smsg.hdr.value.sival_int;

    switch(item)
            {
            case A_TO_B:
                save_Event(A_TO_B);//自定义的函数,用来写日志,记录事件
                break;

            }

}

name_detach(m_datahandle_attach,0);

}

main()

{

m_datahandle_attach = name_attach(NULL,DATA_REC_CHANNEL,0);

m_data_coid = name_open(DATA_REC_CHANNEL,0);

pthread_create(NULL, &attr, &Data_handle_thread, NULL);
pthread_create(NULL, &attr, &myFunc, NULL);

}



客户端线程
void* myFunc(void*)
{
    MsgSendPulse (m_data_coid,20,A_TO_B,0);//第二个参数即是服务器端线程的优先级。
}

使用线程间通信的原因:
1、事件触发后,不能耽误下一步任务,同时要记录事件。
2、线程为中断函数,比如10ms一个中断,线程中不能有运算时间超过10ms的代码。
3...

总结:

两个线程间的通信

服务器端线程:使用函数 name_attach创建通道;使用MsgReceive函数接收脉冲信号;

客户端线程:使用name_open与服务器端线程建立连接,使用MsgSendPulse函数向服务器线程中发送脉冲信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值