CSPspEmu.Hle.Modules.threadman.ThreadManForUser._sceKernelWaitSemaCB C# (CSharp) Метод

_sceKernelWaitSemaCB() приватный Метод

private _sceKernelWaitSemaCB ( SemaphoreId SemaphoreId, int Signal, uint Timeout, bool HandleCallbacks ) : int
SemaphoreId SemaphoreId
Signal int
Timeout uint
HandleCallbacks bool
Результат int
        private int _sceKernelWaitSemaCB(SemaphoreId SemaphoreId, int Signal, uint* Timeout, bool HandleCallbacks)
        {
            var CurrentThread = ThreadManager.Current;
            var Semaphore = GetSemaphoreById(SemaphoreId);
            bool TimedOut = false;

            CurrentThread.SetWaitAndPrepareWakeUp(HleThread.WaitType.Semaphore, String.Format("sceKernelWaitSema('{0}')", Semaphore.Name), Semaphore, WakeUpCallback =>
            {
                PspRtc.RegisterTimeout(Timeout, () => { TimedOut = true; WakeUpCallback(); });

                Semaphore.WaitThread(CurrentThread, () =>
                {
                    WakeUpCallback();
                    //ThreadManager.ScheduleNext(CurrentThread);
                }, Signal);
            }, HandleCallbacks: HandleCallbacks);

            if (TimedOut)
            {
                throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_WAIT_TIMEOUT));
            }

            return 0;
        }
ThreadManForUser