几个MessageQ的函数 继续贴几个MessageQ的函数: /**/ /**使用qstatus的时候要将.init文件中的ENABLE_SBS设置为YES*ENABLE_SBS MessageQ给出的解释:start selective broadcast and AVAIL/UNAVAIL*/ /**/ /**查询MessageQ的队列中有多少条消息*/ int32 qpendings( short qid, int * mailNum) { int32 dmq_status; int32 num_queues; short q_list[1]; int32 pend_list[1]; int i; i = -1; num_queues = 1; q_list[0] = qid; dmq_status = putil_show_pending( &num_queues, q_list, pend_list ); if ( dmq_status != PAMS__SUCCESS ) { mailNum = &i; return ( dmq_status ); } *mailNum = pend_list[0]; return ( 0 );} /**/ /**判断队列状态MSG_TYPE_AVAIL为attached MSG_TYPE_UNAVAIL为unattached*调用了三个函数AvailRegister,AvailGet, AvailDeregister*函数在MesssageQ的Example里面都能找到*/ int32 qstatus( short qid) { short qstate; q_address Avail_server; q_address target_q; short qavail; short Rc; char priority; short msg_class; short msg_type; short msg_area_len; short msg_data_len; int32 dmq_status; int32 sel_filter; q_address msg_source; struct PSB get_psb; int32 timeout = 30; char *groupid, *getenv( ); groupid=getenv("DMQ_GROUP_ID"); qname2id("AVAIL_SERVER", &qavail); Avail_server.au.queue=qavail; Avail_server.au.group=atoi(groupid); target_q.au.queue=qid; target_q.au.group=atoi(groupid); Rc=AvailRegister(target_q,Avail_server); if(Rc!=PAMS__SUCCESS) { /**//*return;*/ } printf("AvailRegister succ/n"); Rc=AvailGet(); if(Rc==MSG_TYPE_AVAIL) qstate=MSG_TYPE_AVAIL; else if(Rc==MSG_TYPE_UNAVAIL) qstate=MSG_TYPE_UNAVAIL; else qstate=0; Rc=AvailDeregister(target_q, Avail_server); return (int32)qstate;}