示例#1
0
 public int sceKernelTrySendMsgPipe(MsgPipe MsgPipe, byte *Message, int Size, int WaitMode, int *ResultSizeAddr)
 {
     MsgPipe.Enqueue(Message, Size);
     if (ResultSizeAddr != null)
     {
         *ResultSizeAddr = Size;
     }
     return(0);
 }
示例#2
0
        public int sceKernelSendMsgPipe(MsgPipe MsgPipe, byte *Message, int Size, int WaitMode, int *ResultSizeAddr,
                                        uint *Timeout)
        {
            if (Timeout != null)
            {
                Logger.Unimplemented("sceKernelSendMsgPipe.Timeout != null");
            }

#if DEBUG_MSG_PIPES
            Console.Error.WriteLine("sceKernelSendMsgPipe");
#endif

            bool Transferred = false;
            while (!Transferred)
            {
                try
                {
                    //bool WaitiMsgPipe.OnAvailableForRecv.Count
                    MsgPipe.Enqueue(Message, Size);
                    ThreadManager.Current.CpuThreadState.Yield();
                    Transferred = true;
                }
                catch (SceKernelException)
                {
                    //throw(new NotImplementedException());
                    ThreadManager.Current.SetWaitAndPrepareWakeUp(HleThread.WaitType.None, "sceKernelSendMsgPipe",
                                                                  MsgPipe, WakeUpCallback =>
                    {
#if DEBUG_MSG_PIPES
                        Console.Error.WriteLine("sceKernelSendMsgPipe.wait");
#endif
                        MsgPipe.OnAvailableForSend.Enqueue(() =>
                        {
#if DEBUG_MSG_PIPES
                            Console.Error.WriteLine("sceKernelSendMsgPipe.awake");
#endif
                            WakeUpCallback();
                        });
                    }, HandleCallbacks: false);
                }
            }

            return(0);
        }
 public int sceKernelTrySendMsgPipe(MsgPipe MsgPipe, byte* Message, int Size, int WaitMode, int* ResultSizeAddr)
 {
     MsgPipe.Enqueue(Message, Size);
     if (ResultSizeAddr != null)
     {
         *ResultSizeAddr = Size;
     }
     return 0;
 }
        public int sceKernelSendMsgPipe(MsgPipe MsgPipe, byte* Message, int Size, int WaitMode, int* ResultSizeAddr, uint* Timeout)
        {
            if (Timeout != null)
            {
                Logger.Unimplemented("sceKernelSendMsgPipe.Timeout != null");
            }

            #if DEBUG_MSG_PIPES
            Console.Error.WriteLine("sceKernelSendMsgPipe");
            #endif

            bool Transferred = false;
            while (!Transferred)
            {
                try
                {
                    //bool WaitiMsgPipe.OnAvailableForRecv.Count
                    MsgPipe.Enqueue(Message, Size);
                    ThreadManager.Current.CpuThreadState.Yield();
                    Transferred = true;
                }
                catch (SceKernelException)
                {
                    //throw(new NotImplementedException());
                    ThreadManager.Current.SetWaitAndPrepareWakeUp(HleThread.WaitType.None, "sceKernelSendMsgPipe", MsgPipe, WakeUpCallback =>
                    {
            #if DEBUG_MSG_PIPES
                        Console.Error.WriteLine("sceKernelSendMsgPipe.wait");
            #endif
                        MsgPipe.OnAvailableForSend.Enqueue(() =>
                        {
            #if DEBUG_MSG_PIPES
                            Console.Error.WriteLine("sceKernelSendMsgPipe.awake");
            #endif
                            WakeUpCallback();
                        });
                    }, HandleCallbacks: false);
                }
            }

            return 0;
        }