private void doFilter(System.IntPtr Scan0, int stride) { int height = this.b.Height; int steps = computeHeightSteps(height); // anzahl der threads die mehr als die min elemente berechnen int sectorThreshold = height % thHandler.getThreads(); for (int i = 0; i < thHandler.getThreads(); i++) { int startIndex = i * steps + Math.Min(i, sectorThreshold); int stopIndex = startIndex + steps + (i < sectorThreshold ? 1 : 0); Thread thread = null; switch (this.filter) { case ImageManipulaterType.Name.INVERT: Invert f = new Invert(this.b, Scan0, stride, startIndex, stopIndex, this.thHandler); thread = new Thread(f.perform); break; } // Thread starten thread.Start(); // Thread registrieren, um später abzufragen ob thread läuft oder nicht this.thHandler.register(thread); } }
private void doFilter( System.IntPtr Scan0, int stride) { int height = this.b.Height; int steps = computeHeightSteps(height); // anzahl der threads die mehr als die min elemente berechnen int sectorThreshold = height % thHandler.getThreads(); for (int i = 0; i < thHandler.getThreads(); i++) { int startIndex = i * steps + Math.Min(i, sectorThreshold); int stopIndex = startIndex + steps + (i < sectorThreshold ? 1 : 0); Thread thread = null; switch (this.filter) { case ImageManipulaterType.Name.INVERT: Invert f = new Invert(this.b, Scan0, stride, startIndex, stopIndex, this.thHandler); thread = new Thread( f.perform ); break; } // Thread starten thread.Start(); // Thread registrieren, um später abzufragen ob thread läuft oder nicht this.thHandler.register(thread); } }