123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
-
-
-
- #include "log4c/vos.h"
- #ifdef WIN32
- VOS_STATUS VOS_DeleteSem(SEM_ID semId)
- {
- BOOLEAN status;
- status = CloseHandle(semId);
- if(status != 0)
- {
- return VOS_OK;
- }
- else
- {
- return VOS_ERROR;
- }
- }
-
- VOS_STATUS VOS_GiveSem(SEM_ID semId)
- {
- BOOLEAN status;
- status = ReleaseSemaphore(semId, 1, NULL);
- if(status != 0)
- {
- return VOS_OK;
- }
- else
- {
- return VOS_ERROR;
- }
- }
-
- VOS_STATUS VOS_TakeSem(SEM_ID semId, SWORD32 timeout)
- {
- WORD32 status;
- WORD32 timeLimit;
- if(timeout == -1)
- {
- timeLimit = INFINITE;
- }
- else
- {
- timeLimit = (WORD32)timeout;
- }
- status = WaitForSingleObject(semId, timeLimit);
- if(status == WAIT_OBJECT_0)
- {
- return VOS_OK;
- }
- else
- {
- return VOS_ERROR;
- }
- }
-
- SEM_ID VOS_CreateMSem(SWORD32 options)
- {
- SEM_ID semId;
- semId = VOS_CreateBSem(0, (VOS_SEM_STATE)1);
- return semId;
- }
-
- SEM_ID VOS_CreateBSem(SWORD32 options, VOS_SEM_STATE initialState)
- {
- HANDLE semId;
- semId = CreateSemaphore(NULL, (int)initialState, 1, NULL);
- return semId;
- }
-
- TASK_ID VOS_GetSelfTaskID(VOID)
- {
- return (TASK_ID)GetCurrentThreadId();
-
- }
- #else
-
- VOS_STATUS VOS_DeleteSem(SEM_ID semId)
- {
- VOS_STATUS iResult = VOS_OK;
- #ifdef PTHREAD
- if (semId != NULL)
- {
- iResult = (VOS_STATUS)sem_destroy(semId);
- free(semId);
- }
- #endif
- return iResult;
- }
-
- VOS_STATUS VOS_GiveSem(SEM_ID semId)
- {
- #ifdef PTHREAD
- if(sem_post(semId) == 0)
- {
- return VOS_OK;
- }
- else
- {
- return VOS_ERROR;
- }
- #else
- return VOS_OK;
- #endif
- }
-
- VOS_STATUS VOS_TakeSem(SEM_ID semId, SWORD32 timeout)
- {
- #ifdef PTHREAD
- WORD32 timeLimit;
-
- if(timeout == VOS_WAIT_FOREVER)
- {
- sem_wait(semId);
- return VOS_OK;
- }
- else if (timeout == 0)
- {
- if(0==sem_trywait(semId))
- {
- return VOS_OK;
- }
- else
- {
- return VOS_ERROR;
- }
- }
- else
- {
-
-
- struct timeval tv;
- struct timespec absTime;
- gettimeofday (&tv, 0);
- absTime.tv_sec = tv.tv_sec + timeout / 1000;
- absTime.tv_nsec = tv.tv_usec * 1000 + (timeout % 1000) * 1000000 ;
-
- if (sem_timedwait(semId, &absTime) == 0)
- {
- printf("VOS_OK \n");
- return VOS_OK;
- }
- else
- {
- printf("VOS_ERROR \n");
- return VOS_ERROR;
- }
- printf("VOS_TakeSem semId: %u, absTime.tv_sec:%d absTime.tv_nsec:%d \n", semId, absTime.tv_sec, absTime.tv_nsec);
- }
- #else
- return VOS_OK;
- #endif
- }
-
- SEM_ID VOS_CreateMSem(SWORD32 options)
- {
- #ifdef PTHREAD
- SEM_ID semId = (SEM_ID)malloc (sizeof(sem_t));
- if ( 0 != sem_init(semId,0,1))
- {
- return NULL;
- }
- return semId;
- #else
- return 1;
- #endif
- }
-
- SEM_ID VOS_CreateBSem(SWORD32 options, VOS_SEM_STATE initialState)
- {
- SEM_ID semId = (SEM_ID)malloc (sizeof(sem_t));
- if ( 0 != sem_init(semId,0,initialState))
- {
- return NULL;
- }
- return semId;
- }
-
- TASK_ID VOS_GetSelfTaskID(VOID)
- {
- TASK_ID dwID;
- dwID = pthread_self();
- return dwID;
- }
- #endif
-
|