diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/producer_8c_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/producer_8c_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,81 @@ + + + + +TB9.2 Example Applications: examples/PIPS/opencproducerconsumerex/src/producer.c Source File + + + + + +

examples/PIPS/opencproducerconsumerex/src/producer.c

Go to the documentation of this file.
00001 
+00015 /* INCLUDE FILES */
+00016 #include <sys/types.h>
+00017 #include <sys/ipc.h>
+00018 #include <sys/msg.h>
+00019 #include <stdlib.h>
+00020 #include <stdio.h>
+00021 
+00022 #include "CommanHeader.h"
+00023 
+00024 #define MIN(X, Y) (X < Y) ? X : Y;
+00025 
+00026 /*****************************************************************************
+00027 *  ProducerThreadEntryPoint
+00028 *  Function: Producer Thread that produces M number of items at a time 
+00029 *  where M is number of Consumers.
+00030 *  This thread will produce N number of items where N is total number of items 
+00031 *  needed by all the Consumers.
+00032 *  It also informs the Observer thread about item production
+00033 *******************************************************************************/
+00034 
+00035 void* ProducerThreadEntryPoint( void* aParam ) 
+00036 {
+00037         ThreadParam* args = (ThreadParam*) aParam;
+00038         int yetToProduce = args->noOfItems;
+00039         int produceNow = 0;
+00040         int noOfConsumers = args->noOfConsumers;
+00041         ProducedItem item;
+00042         key_t msgQFd = -1;
+00043         int ret = 0;
+00044         /* Construct the message to be send thru msg q */
+00045         struct msgbuf* sendMsg = (struct msgbuf*)malloc(KMAXSENDMSG);
+00046         sendMsg->mtype = 1;
+00047         
+00048         /* Get the Handler to Observer Msg Q */
+00049         msgQFd = msgget(KMSGQKEY, IPC_CREAT);
+00050 
+00051         item.itemNum = 1;
+00052 
+00053         while (yetToProduce != 0) 
+00054         {
+00055                 produceNow = MIN(yetToProduce, noOfConsumers);
+00056                 yetToProduce -= produceNow;
+00057 
+00058                 /* Acquire the Lock so that Producer can Produce "produceNow" items once. */
+00059                 sem_wait(&args->itemLock);
+00060                 for(;produceNow != 0; produceNow--) 
+00061                 {
+00062                         sprintf(item.itemName, "Item-Number: #%d", item.itemNum);
+00063                         /* Push this item on to Stack so that Consumetrs can take it.*/
+00064                         PushOntoStack(&item);
+00065                         item.itemNum++;
+00066                         /* Inform the Observer about Item Production */
+00067                         sprintf(sendMsg->mtext, " Producer Produced %s\0", item.itemName);
+00068                         ret = msgsnd(msgQFd, sendMsg, strlen(sendMsg->mtext)+4, 0);
+00069                 }
+00070                 /* Release the Lock so that Consumers can consume produced items. */
+00071                 sem_post(&args->itemLock);
+00072         }
+00073 
+00074         free( sendMsg );
+00075         return (int*)0;
+00076 }
+00077 
+00078 /*  End of File */
+
+
Generated by  + +doxygen 1.6.2
+ +