Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ WaitThreadStart()

void System.Threading.PortableThreadPool.WaitThread.WaitThreadStart ( )
inlineprivate

Definition at line 810 of file PortableThreadPool.cs.

811 {
812 while (true)
813 {
814 int num = ProcessRemovals();
815 int tickCount = Environment.TickCount;
816 int num2 = -1;
817 if (num == 0)
818 {
819 num2 = 20000;
820 }
821 else
822 {
823 for (int i = 0; i < num; i++)
824 {
825 RegisteredWaitHandle registeredWaitHandle = _registeredWaits[i];
826 if (!registeredWaitHandle.IsInfiniteTimeout)
827 {
828 int num3 = Math.Max(0, registeredWaitHandle.TimeoutTimeMs - tickCount);
829 num2 = ((num2 != -1) ? Math.Min(num3, num2) : num3);
830 if (num2 == 0)
831 {
832 break;
833 }
834 }
835 }
836 }
837 int num4 = WaitHandle.WaitAny(new ReadOnlySpan<SafeWaitHandle>(_waitHandles, 0, num + 1), num2);
838 if (num4 >= 128 && num4 < 129 + num)
839 {
840 num4 += -128;
841 }
842 switch (num4)
843 {
844 case 0:
845 break;
846 default:
847 {
848 RegisteredWaitHandle registeredHandle = _registeredWaits[num4 - 1];
849 QueueWaitCompletion(registeredHandle, timedOut: false);
850 break;
851 }
852 case 258:
853 {
854 if (num == 0 && ThreadPoolInstance.TryRemoveWaitThread(this))
855 {
856 return;
857 }
858 tickCount = Environment.TickCount;
859 for (int j = 0; j < num; j++)
860 {
861 RegisteredWaitHandle registeredWaitHandle2 = _registeredWaits[j];
862 if (!registeredWaitHandle2.IsInfiniteTimeout && tickCount - registeredWaitHandle2.TimeoutTimeMs >= 0)
863 {
864 QueueWaitCompletion(registeredWaitHandle2, timedOut: true);
865 }
866 }
867 break;
868 }
869 }
870 }
871 }
readonly RegisteredWaitHandle[] _registeredWaits
void QueueWaitCompletion(RegisteredWaitHandle registeredHandle, bool timedOut)
static readonly PortableThreadPool ThreadPoolInstance

References System.Threading.PortableThreadPool.WaitThread._registeredWaits, System.Threading.PortableThreadPool.WaitThread._waitHandles, System.Threading.RegisteredWaitHandle.IsInfiniteTimeout, System.Math.Max(), System.Math.Min(), System.Threading.PortableThreadPool.WaitThread.ProcessRemovals(), System.Threading.PortableThreadPool.WaitThread.QueueWaitCompletion(), System.Threading.PortableThreadPool.ThreadPoolInstance, System.Environment.TickCount, System.Threading.RegisteredWaitHandle.TimeoutTimeMs, and System.Threading.WaitHandle.WaitAny().

Referenced by System.Threading.PortableThreadPool.WaitThread.WaitThread().