<HTML> <!-- ex01.html,v 1.2 2000/06/04 22:02:08 brunsch Exp --> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Author" CONTENT="Ambreen Ilyas"> <META NAME="GENERATOR" CONTENT="Mozilla/4.05 [en] (X11; I; SunOS 5.5.1 sun4u) [Netscape]"> <TITLE>Example 1</TITLE> </HEAD> <BODY> <FONT COLOR="#CC0000">/////////////////////////////////////////////////////////////////////////////////////////////////////////////////</FONT> <BR><FONT COLOR="#CC0000">//// This example is from the ACE Programmers Guide.</FONT> <BR><FONT COLOR="#CC0000">//// Chapter: "The Message Queue"</FONT> <BR><FONT COLOR="#CC0000">//// For details please see the guide at</FONT> <BR><FONT COLOR="#CC0000">//// http://www.cs.wustl.edu/~schmidt/ACE.html</FONT> <BR><FONT COLOR="#CC0000">//// AUTHOR: Umar Syyid (usyyid@hns.com)</FONT> <BR><FONT COLOR="#CC0000">//// and Ambreen Ilyas (ambreen@bitsmart.com)</FONT> <BR><FONT COLOR="#CC0000">/////////////////////////////////////////////////////////////////////////////////////////////////////////////</FONT> <P><FONT COLOR="#CC0000">//Example 1</FONT> <BR><FONT COLOR="#000099">#include</FONT> "<FONT COLOR="#006600">ace/Message_Queue.h"</FONT> <BR><FONT COLOR="#000099">#include</FONT> <FONT COLOR="#006600">"ace/Get_Opt.h"</FONT> <BR><FONT COLOR="#000099">#define</FONT> <FONT COLOR="#663366">SIZE_BLOCK 1</FONT> <BR><FONT COLOR="#000099">#define</FONT> <FONT COLOR="#663366">NO_MSGS 10</FONT> <P>class QTest{ <BR>public: <BR>QTest():no_msgs_(NO_MSGS){ <BR> <FONT COLOR="#FF0000">//First create a message queue of default size.</FONT> <BR> if(!(this->mq_=new ACE_Message_Queue<ACE_NULL_SYNCH> ())) <BR> ACE_DEBUG((LM_ERROR,"Error in message queue initialization \n")); <BR> } <BR> <BR>int start_test(){ <BR> for(int i=0; i<no_msgs_;i++){ <BR> <FONT COLOR="#FF0000">//create a new message block of size 1</FONT> <BR> ACE_Message_Block *mb= new ACE_Message_Block(SIZE_BLOCK);<FONT COLOR="#FF0000"></FONT> <P><FONT COLOR="#FF0000"> //Insert data into the message block using the rd_ptr</FONT> <BR> *mb->wr_ptr()=i; <P><FONT COLOR="#FF0000"> //Be careful to advance the wr_ptr</FONT> <BR> mb->wr_ptr(1); <P> <FONT COLOR="#FF0000">//Enqueue the message block onto the message queue</FONT> <BR> if(this->mq_->enqueue_prio(mb)==-1){ <BR> ACE_DEBUG((LM_ERROR,"\nCould not enqueue on to mq!!\n")); <BR> return -1; <BR> } <BR> <BR> ACE_DEBUG((LM_INFO,"EQd data: %d\n",*mb->rd_ptr())); <BR> } <FONT COLOR="#FF0000">//end for</FONT> <P><FONT COLOR="#FF0000">//Now dequeue all the messages</FONT> <BR>this->dequeue_all(); <BR>return 0; <BR> } <P>void dequeue_all(){ <BR> ACE_DEBUG((LM_INFO,"\n\nBeginning DQ \n")); <BR> ACE_DEBUG((LM_INFO,"No. of Messages on Q:%d Bytes on Q:%d \n",mq_->message_count(), mq_->message_bytes())); <BR> ACE_Message_Block *mb; <P> <FONT COLOR="#FF0000">//dequeue the head of the message queue until no more messages are left</FONT> <BR> for(int i=0;i<no_msgs_;i++){ <BR> mq_->dequeue_head(mb); <BR> ACE_DEBUG((LM_INFO,"DQd data %d\n",*mb->rd_ptr())); <BR> } <BR> } <BR>private: <BR> ACE_Message_Queue<ACE_NULL_SYNCH> *mq_; <BR> int no_msgs_; <BR>}; <BR> <P>int main(int argc, char* argv[]){ <BR> QTest test; <BR> if(test.start_test()<0) <BR> ACE_DEBUG((LM_ERROR,"Program failure \n")); <BR>} <P> <A HREF="ex02.html">Next Example</A> </BODY> </HTML>