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 @@ + + +
+ +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 */ +