Running multiple thread instances of the same function. (See MultiThread Program for an example on how to use it)

Dependents:   MutliThread Server_Multi_Client HelloWorld C027_SupportTest ... more

Committer:
lemniskata
Date:
Sat Jun 29 22:05:28 2013 +0000
Revision:
2:46b56c9086f2
Parent:
1:ecdd97ea3d3b
Child:
3:d370bed31f45
Creating and running multiple thread instances of the same function. All running threads are stored in a list with their osThreadId

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lemniskata 0:266b0dc4f8d0 1 /*
lemniskata 0:266b0dc4f8d0 2 ** File name: Thread.cpp
lemniskata 0:266b0dc4f8d0 3 ** Descriptions: Creates multiple thread instances of the same function
lemniskata 0:266b0dc4f8d0 4 **
lemniskata 0:266b0dc4f8d0 5 **------------------------------------------------------------------------------------------------------
lemniskata 0:266b0dc4f8d0 6 ** Created by: Ivan Shindev
lemniskata 0:266b0dc4f8d0 7 ** Created date: 06/29/2013
lemniskata 0:266b0dc4f8d0 8 ** Version: 1.0
lemniskata 0:266b0dc4f8d0 9 ** Descriptions: The original version
lemniskata 0:266b0dc4f8d0 10 **
lemniskata 0:266b0dc4f8d0 11 **------------------------------------------------------------------------------------------------------
lemniskata 0:266b0dc4f8d0 12 ** Modified by:
lemniskata 0:266b0dc4f8d0 13 ** Modified date:
lemniskata 0:266b0dc4f8d0 14 ** Version:
lemniskata 0:266b0dc4f8d0 15 ** Descriptions:
lemniskata 0:266b0dc4f8d0 16 ********************************************************************************************************/
lemniskata 0:266b0dc4f8d0 17 #include "Threads.h"
lemniskata 0:266b0dc4f8d0 18
lemniskata 2:46b56c9086f2 19 /*Initialize memory and set the pointer to the thread*/
lemniskata 2:46b56c9086f2 20 int initThread(ThreadList **addresOfTL,os_pthread pthread,ThreadList** addresOfThread)
lemniskata 0:266b0dc4f8d0 21 {
lemniskata 2:46b56c9086f2 22 if(*addresOfTL==NULL)
lemniskata 2:46b56c9086f2 23 {
lemniskata 2:46b56c9086f2 24 *addresOfTL=(ThreadList*)malloc(sizeof(ThreadList));
lemniskata 2:46b56c9086f2 25 if(*addresOfTL==NULL)
lemniskata 2:46b56c9086f2 26 return 0;
lemniskata 0:266b0dc4f8d0 27
lemniskata 2:46b56c9086f2 28 (*addresOfTL)->thread=NULL;
lemniskata 2:46b56c9086f2 29 (*addresOfTL)->thread=(osThreadDef_t *)malloc(sizeof(osThreadDef_t ));
lemniskata 0:266b0dc4f8d0 30
lemniskata 2:46b56c9086f2 31 if((*addresOfTL)->thread==NULL)
lemniskata 2:46b56c9086f2 32 return 0;
lemniskata 0:266b0dc4f8d0 33
lemniskata 2:46b56c9086f2 34 (*addresOfTL)->thread->pthread=pthread;
lemniskata 2:46b56c9086f2 35 (*addresOfTL)->thread->tpriority=osPriorityNormal;
lemniskata 2:46b56c9086f2 36 (*addresOfTL)->thread->stacksize=DEFAULT_STACK_SIZE;
lemniskata 2:46b56c9086f2 37
lemniskata 2:46b56c9086f2 38 (*addresOfTL)->thread->stack_pointer=NULL;
lemniskata 2:46b56c9086f2 39 (*addresOfTL)->thread->stack_pointer=(unsigned char *)malloc(DEFAULT_STACK_SIZE);
lemniskata 0:266b0dc4f8d0 40
lemniskata 2:46b56c9086f2 41 if((*addresOfTL)->thread->stack_pointer==NULL)
lemniskata 2:46b56c9086f2 42 return 0;
lemniskata 2:46b56c9086f2 43 (*addresOfTL)->nextThread=NULL;
lemniskata 2:46b56c9086f2 44 (*addresOfThread)=(*addresOfTL);
lemniskata 2:46b56c9086f2 45 return 1;
lemniskata 2:46b56c9086f2 46 }
lemniskata 2:46b56c9086f2 47 else
lemniskata 2:46b56c9086f2 48 return initThread(&((*addresOfTL)->nextThread),pthread,addresOfThread);
lemniskata 0:266b0dc4f8d0 49 }
lemniskata 0:266b0dc4f8d0 50