继续贴几个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;
}

 

 

 

posted on 2008-09-05 06:47  我一路走来。。。  阅读(545)  评论(1编辑  收藏  举报