--- joko/Uni/BSArch/04/bmp_fractal.c 2006/07/01 11:45:35 1.3 +++ joko/Uni/BSArch/04/bmp_fractal.c 2006/07/01 12:19:46 1.5 @@ -5,7 +5,7 @@ * Uebung 4.4 */ -// $Id: bmp_fractal.c,v 1.3 2006/07/01 11:45:35 joko Exp $ +// $Id: bmp_fractal.c,v 1.5 2006/07/01 12:19:46 joko Exp $ #include #include @@ -95,23 +95,24 @@ int main(int argc, char *argv[]) { - int len,x,y; - char bgr[3]; - short svalue; - int lvalue; + // MMF support + DWORD err; HANDLE hMap, hFile; - DWORD err, size; - int elems; - LPVOID pData; unsigned char *pDataBitmap, *pDataBitmapCurrent; + + // workers + unsigned int workers = 3; + unsigned int worker_index, worker_rows, worker_startrow; - int offset; + // fractal calculation + int x, y; + char bgr[3]; - // create empty file (black background) - write_blank_file("test.bmp"); + // create empty bmp-file (black background) + write_blank_file("test.bmp"); /* open file for reading and writing */ hFile = CreateFile("test.bmp", GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); @@ -152,6 +153,21 @@ } */ + // calculate segments of bitmap for worker threads/processes + worker_rows = YSIZE / workers; + printf("rows for each worker: %i\n", worker_rows); + for (worker_index = 0; worker_index < workers; worker_index++) { + + // number of row to start for each worker + worker_startrow = worker_index * worker_rows; + + // recalculate number of rows for last worker if (YSIZE mod workers) != 0 + if (worker_index == workers - 1) { + worker_rows = YSIZE - worker_startrow; + printf("rows for last worker: %i\n", worker_rows); + } + } + // calculate fractal for (y=YSIZE-1; y>=0; y--) { for (x=0; x