コード例 #1
0
ファイル: T01_OsApiTest.cpp プロジェクト: flake123p/ProjectH
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__);
}
コード例 #2
0
 ULONG ComUnknownBase::BaseAddRef(void)
 {
     isShared_ = true;
     ULONG result = InterlockedIncrement(&refCount_);
     ASSERT_IF(result == 1, "Cannot AddRef() on a released object");
     return result;
 }
コード例 #3
0
ファイル: LibThreadMgr.cpp プロジェクト: flake123p/ProjectH
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);
}
コード例 #4
0
    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;
    }
コード例 #5
0
 ComUnknownBase::~ComUnknownBase()
 {
     ASSERT_IF(refCount_ != 0, "ComUnknownBase: Destructed with non-zero ref-count.");
 }