public int sceKernelReceiveMbx(MessageBox MessageBox, PspPointer* PointerToMessage, uint* Timeout)
{
var CurrentThread = ThreadManager.Current;
bool TimedOut = false;
CurrentThread.SetWaitAndPrepareWakeUp(HleThread.WaitType.None, "sceKernelReceiveMbx", MessageBox, WakeUpCallback =>
{
if (Timeout != null)
{
PspRtc.RegisterTimerInOnce(TimeSpanUtils.FromMicroseconds(*Timeout), () =>
{
TimedOut = true;
WakeUpCallback();
});
}
MessageBox.Receive(PointerToMessage, WakeUpCallback);
}, HandleCallbacks: false);
if (TimedOut)
{
return (int)SceKernelErrors.ERROR_KERNEL_WAIT_TIMEOUT;
}
else
{
//if (Timeout)
//return MessageBox.Receive(Message);
return 0;
}
}