void T01_01_LinuxEventTest(void) { int retVal; retVal = LibIPC_Event_BatchCreate(gEventAry, GET_ARRAY_LEN(gEventAry)); ASSERT_IF(retVal); ThreadEntryFunc funcAry[] = { T01_01_TestThread00, T01_01_TestThread01, T01_01_TestThread02, T01_01_TestThread03, }; LibThreadMgr_BatchCreate(gThreadAry, funcAry, GET_ARRAY_LEN(gThreadAry)); LibOs_SleepMiliSeconds(10); // For linux, prevent SetEvent() is running before WaitEvent() !! LibIPC_Event_Set(gEventAry[0]); LibTime_StartMicroSecondClock(); retVal = LibThreadMgr_BatchWait(gThreadAry, GET_ARRAY_LEN(gThreadAry)); ASSERT_IF(retVal); LibTime_StopMicroSecondClock_ShowResult(); PRINT_NEXT_LINE; retVal = LibIPC_Event_BatchDestroy(gEventAry, GET_ARRAY_LEN(gEventAry)); ASSERT_IF(retVal); retVal = LibThreadMgr_BatchDestroy(gThreadAry, GET_ARRAY_LEN(gThreadAry)); ASSERT_IF(retVal); printf("%s() ... [Success]\n", __func__); }
ULONG ComUnknownBase::BaseAddRef(void) { isShared_ = true; ULONG result = InterlockedIncrement(&refCount_); ASSERT_IF(result == 1, "Cannot AddRef() on a released object"); return result; }
void LibThreadMgr_DemoPriority(void) { THREAD_HANDLE_t threadHdl_A; THREAD_HANDLE_t threadHdl_B; int retVal; retVal = LibThread_NewHandle(&threadHdl_A, TPRI_HH); ASSERT_IF(retVal); retVal = LibThread_NewHandle(&threadHdl_B, TPRI_LL); ASSERT_IF(retVal); retVal = LibIPC_Event_Create(&gEvent_A); ASSERT_IF(retVal); retVal = LibIPC_Event_Create(&gEvent_B); ASSERT_IF(retVal); retVal = LibThread_Create(threadHdl_A, Test_Thread_A_Priority); ASSERT_IF(retVal); retVal = LibThread_Create(threadHdl_B, Test_Thread_B_Priority); ASSERT_IF(retVal); LibOs_SleepMiliSeconds(10); // For linux, prevent SetEvent() is running before WaitEvent() !! LibIPC_Event_Set(gEvent_A); LibTime_StartMicroSecondClock(); LibThread_WaitThread(threadHdl_A); LibThread_WaitThread(threadHdl_B); LibTime_StopMicroSecondClock_ShowResult(); PRINT_NEXT_LINE; retVal = LibIPC_Event_Destroy(gEvent_A); ASSERT_IF(retVal); retVal = LibIPC_Event_Destroy(gEvent_B); ASSERT_IF(retVal); retVal = LibThread_DestroyHandle(threadHdl_A); ASSERT_IF(retVal); retVal = LibThread_DestroyHandle(threadHdl_B); ASSERT_IF(retVal); }
ULONG ComUnknownBase::BaseRelease(void) { ULONG refCount; if (isShared_) { refCount = InterlockedDecrement(&refCount_); } else { refCount = --refCount_; } // Ensure we do not decrement a 0 ref count. const ULONG MinusOneULONG = static_cast<ULONG>(0) - static_cast<ULONG>(1); ASSERT_IF(refCount == MinusOneULONG, "ComUnknownBase: Too many calls to Release."); if (refCount == 0) { delete this; } return refCount; }
ComUnknownBase::~ComUnknownBase() { ASSERT_IF(refCount_ != 0, "ComUnknownBase: Destructed with non-zero ref-count."); }