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

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

private _sceKernelWaitThreadEndCB ( int ThreadId, uint Timeout, bool HandleCallbacks ) : int
ThreadId int
Timeout uint
HandleCallbacks bool
Результат int
		private int _sceKernelWaitThreadEndCB(int ThreadId, uint* Timeout, bool HandleCallbacks)
		{
			var ThreadToWaitEnd = GetThreadById(ThreadId);

			if (ThreadToWaitEnd.HasAnyStatus(HleThread.Status.Stopped))
			{
				return 0;
			}

			if (ThreadToWaitEnd.HasAnyStatus(HleThread.Status.Killed))
			{
				return 0;
			}

			bool TimedOut = false;

			ThreadManager.Current.SetWaitAndPrepareWakeUp(HleThread.WaitType.None, String.Format("sceKernelWaitThreadEnd('{0}')", ThreadToWaitEnd.Name), ThreadToWaitEnd, WakeUpCallback =>
			{
				if (Timeout != null)
				{
					PspRtc.RegisterTimerInOnce(TimeSpanUtils.FromMicroseconds(*Timeout), () =>
					{
						TimedOut = true;
						WakeUpCallback();
					});
				}

				Console.WriteLine("Wait End!");
				Action OnTerminate = null;

				OnTerminate = () =>
				{
					ThreadToWaitEnd.OnTerminate -= OnTerminate;
					Console.WriteLine("Ended!");
					//throw(new Exception("aaaaaaaaaaaa"));
					WakeUpCallback();
				};

				ThreadToWaitEnd.OnTerminate += OnTerminate;
			}, HandleCallbacks: HandleCallbacks);

			if (TimedOut)
			{
				return (int)SceKernelErrors.ERROR_KERNEL_WAIT_TIMEOUT;
			}
			else
			{
				return 0;
			}
		}
ThreadManForUser