CSPspEmu.Hle.Managers.HleCallbackManager.ExecuteQueued C# (CSharp) Метод

ExecuteQueued() публичный Метод

public ExecuteQueued ( CpuThreadState CpuThreadState, bool MustReschedule ) : int
CpuThreadState CSPspEmu.Core.Cpu.CpuThreadState
MustReschedule bool
Результат int
        public int ExecuteQueued(CpuThreadState CpuThreadState, bool MustReschedule)
        {
            int ExecutedCount = 0;

            //Console.WriteLine("ExecuteQueued");
            if (HasScheduledCallbacks)
            {
                //Console.WriteLine("ExecuteQueued.HasScheduledCallbacks!");
                //Console.Error.WriteLine("STARTED CALLBACKS");
                while (HasScheduledCallbacks)
                {
                    var HleCallback = DequeueScheduledCallback();

                    /*
                    var FakeCpuThreadState = new CpuThreadState(CpuProcessor);
                    FakeCpuThreadState.CopyRegistersFrom(CpuThreadState);
                    HleCallback.SetArgumentsToCpuThreadState(FakeCpuThreadState);

                    if (FakeCpuThreadState.PC == 0x88040E0) FakeCpuThreadState.PC = 0x880416C;
                    */
                    //Console.WriteLine("ExecuteCallback: PC=0x{0:X}", FakeCpuThreadState.PC);
                    //Console.WriteLine("               : A0=0x{0:X}", FakeCpuThreadState.GPR[4]);
                    //Console.WriteLine("               : A1=0x{0:X}", FakeCpuThreadState.GPR[5]);
                    try
                    {
                        HleInterop.ExecuteFunctionNow(HleCallback.Function, HleCallback.Arguments);
                    }
                    catch (Exception Exception)
                    {
                        Console.Error.WriteLine(Exception);
                    }
                    finally
                    {
                        //Console.WriteLine("               : PC=0x{0:X}", FakeCpuThreadState.PC);
                        ExecutedCount++;
                    }

                    //Console.Error.WriteLine("  CALLBACK ENDED : " + HleCallback);
                    if (MustReschedule)
                    {
                        //Console.Error.WriteLine("    RESCHEDULE");
                        break;
                    }
                }

                ExecutedCount += HleInterop.ExecuteAllQueuedFunctionsNow();
                //Console.Error.WriteLine("ENDED CALLBACKS");
            }

            return ExecutedCount;
        }

Usage Example

Пример #1
0
        private void ExecuteQueuedCallbacks()
        {
#if !DISABLE_CALLBACKS
            bool HasScheduledCallbacks = HleCallbackManager.HasScheduledCallbacks;
            bool HasQueuedFunctions    = HleInterop.HasQueuedFunctions;

            if (HasScheduledCallbacks || HasQueuedFunctions)
            {
                var Thread = FindCallbackHandlerWithHighestPriority();
                if (Thread != null)
                {
                    if (HasScheduledCallbacks)
                    {
                        HleCallbackManager.ExecuteQueued(Thread.CpuThreadState, true);
                    }
                    if (HasQueuedFunctions)
                    {
                        HleInterop.ExecuteAllQueuedFunctionsNow();
                    }
                }
            }
#endif
        }
All Usage Examples Of CSPspEmu.Hle.Managers.HleCallbackManager::ExecuteQueued