继续贴几个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; } 版权声明 请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。