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

◆ For()

static void ReLogic.Threading.FastParallel.For ( int fromInclusive,
int toExclusive,
ParallelForAction callback,
object context = null )
inlinestatic

Definition at line 52 of file FastParallel.cs.

53 {
54 int num = toExclusive - fromInclusive;
55 if (num == 0)
56 {
57 return;
58 }
59 int num2 = Math.Min(Math.Max(1, Environment.ProcessorCount + 1 - 1 - 1), num);
61 {
62 num2 = 1;
63 }
64 int num3 = num / num2;
65 int num4 = num % num2;
66 CountdownEvent countdownEvent = new CountdownEvent(num2);
67 int num5 = toExclusive;
68 for (int num6 = num2 - 1; num6 >= 0; num6--)
69 {
70 int num7 = num3;
71 if (num6 < num4)
72 {
73 num7++;
74 }
75 num5 -= num7;
76 int num8 = num5;
77 int toExclusive2 = num8 + num7;
78 RangeTask rangeTask = new RangeTask(callback, num8, toExclusive2, context, countdownEvent);
79 if (num6 < 1)
80 {
81 InvokeTask(rangeTask);
82 }
83 else
84 {
86 }
87 }
88 if (countdownEvent.Wait(10000))
89 {
90 return;
91 }
92 ThreadPool.GetAvailableThreads(out var workerThreads, out var _);
93 throw new Exception($"Fatal Deadlock in FastParallelFor. pending: {ThreadPool.PendingWorkItemCount}. avail: {workerThreads}");
94 }
static void InvokeTask(object context)
static int ProcessorCount
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static byte Max(byte val1, byte val2)
Definition Math.cs:738
static bool QueueUserWorkItem(WaitCallback callBack)
static void GetAvailableThreads(out int workerThreads, out int completionPortThreads)

References ReLogic.Threading.FastParallel.ForceTasksOnCallingThread, System.Threading.ThreadPool.GetAvailableThreads(), ReLogic.Threading.FastParallel.InvokeTask(), System.Math.Max(), System.Math.Min(), System.Environment.ProcessorCount, System.Threading.ThreadPool.QueueUserWorkItem(), and System.Threading.CountdownEvent.Wait().

Referenced by Terraria.Graphics.Light.LightMap.BlurPass(), Terraria.Graphics.Light.LegacyLighting.DoColors(), Terraria.Graphics.Light.TileLightScanner.ExportTo(), and Terraria.Graphics.Light.LightingEngine.ExportToMiniMap().