I want to make two thread, because I want to divide first for loop into 2 parts. Instead of for (var row = 0; row < area.Height; row++)
I want to make for (var row = 0; row < area.Height/2; row++)
and for (var row = area.Height/2; row < area.Height; row++)
for each loop i want threads. I don't know how to implement this thing. can you help me ?
using System;
using System.Diagnostics;
using System.Drawing;
using System.Threading;
namespace MandelbrotGenerator {
public class SyncImageGenerator : IImageGenerator {
public void GenerateImage(Area area) {
var sw = Stopwatch.StartNew();
var bitmap = SyncImageGenerator.GenerateSyncroniously(area);
GenerationDone(area, bitmap, sw.Elapsed);
}
public static Bitmap GenerateSyncroniously(Area area) {
int maxIterations;
double zBorder;
double cReal, cImg, zReal, zImg, zNewReal, zNewImg;
maxIterations = Settings.DefaultSettings.MaxIterations;
zBorder = Settings.DefaultSettings.ZBorder * Settings.DefaultSettings.ZBorder;
Bitmap bitmap = new Bitmap(area.Width, area.Height);
for (var row = 0; row < area.Height; row++) {
for (var col = 0; col < area.Width; col++) {
var pixelWidth = (area.MaxReal - area.MinReal) / area.Width;
cReal = area.MinReal + col * pixelWidth;
var pixelHeight = (area.MaxImg - area.MinImg) / area.Height;
cImg = area.MinImg + row * pixelHeight;
zReal = 0.0;
zImg = 0.0;
var iter = 0;
while (zReal*zReal+zImg*zImg<zBorder && iter<maxIterations) {
zNewReal = zReal * zReal - zImg * zImg;
zNewImg = zImg * zReal + zReal * zImg;
zNewReal = zNewReal + cReal;
zNewImg = zNewImg + cImg;
zReal = zNewReal;
zImg = zNewImg;
iter++;
}
bitmap.SetPixel(col, row, ColorSchema.GetColor(iter));
}
}
return bitmap;
}
public event EventHandler<EventArgs<Tuple<Area, Bitmap, TimeSpan>>> ImageGenerated;
private void GenerationDone(Area area, Bitmap bitmap, TimeSpan time) {
if (ImageGenerated != null) {
ImageGenerated(this, new EventArgs<Tuple<Area, Bitmap, TimeSpan>>(Tuple.Create(area, bitmap, time)));
}
}
}
}
Actually, I don't know how to use all these variables and how to share all of them with 2 threads.