// Seperate task info for a morph mod as wont be doing all verts void DoWork(object info) { MegaTaskInfo inf = (MegaTaskInfo)info; while (isRunning) { inf.pauseevent.WaitOne(Timeout.Infinite); switch (inf.jobtype) { case MegaJobType.Modifier: if (inf.end > 0) { for (int m = 0; m < inf.modcontext.mod.mods.Length; m++) { MegaModifier mod = inf.modcontext.mod.mods[m]; if (mod.valid) { mod.DoWork(this, inf.index, inf.start, inf.end, Cores + 1); } } //inf.end = 0; // Done the job } break; case MegaJobType.FaceNormalCalc: RecalcFaceNormalsMT(inf.modcontext.mod, inf.index, Cores + 1); break; case MegaJobType.VertexNormalCalc: RecalcVertexNormalsMT(inf.modcontext.mod, inf.index, Cores + 1); break; case MegaJobType.FaceTangentCalc: BuildFaceTangentsMT(inf.modcontext.mod, inf.index, Cores + 1); break; case MegaJobType.VertexTangentCalc: BuildVertexTangentsMT(inf.modcontext.mod, inf.index, Cores + 1); break; } inf.end = 0; // Done the job } }
void MakeThreads() { if (Cores > 0) { isRunning = true; tasks = new MegaTaskInfo[Cores]; for (int i = 0; i < Cores; i++) { tasks[i] = new MegaTaskInfo(); tasks[i].name = "ThreadID " + i; tasks[i].pauseevent = new AutoResetEvent(false); tasks[i]._thread = new Thread(DoWork); tasks[i]._thread.Start(tasks[i]); } } }
void MakeThreads() { if ( Cores > 0 ) { isRunning = true; tasks = new MegaTaskInfo[Cores]; for ( int i = 0; i < Cores; i++ ) { tasks[i] = new MegaTaskInfo(); tasks[i].name = "ThreadID " + i; tasks[i].pauseevent = new AutoResetEvent(false); tasks[i]._thread = new Thread(DoWork); tasks[i]._thread.Start(tasks[i]); } } }