#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函数向服务器线程中发送脉冲信号。