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); }
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; }