I made 3 threads for testing.
I use struct to send the large data.
and I use the flags for waiting the time of the all thread finish.
<source code>
//////////////////////////////////////////////////////////////////////////
// Made by J.H.KIM, 2011 / feelmare@daum.net, feelmare@gmail.com //
// blog : http://feelmare.blogspot.com //
// My Lab : VISLAB(http://me.pusan.ac.kr) //
//////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <process.h>
#include <windows.h>
struct InputData
{
int * data;
int width;
int height;
int OriginW;
int reserved;
int flag;
};
void ThreadProcessing(void* pParam);
void main()
{
//Data Allocation and Setting
int W = 100;
int H = 100;
int * buffer;
buffer =new int[W*H];
for(int i=0; i<W*H; ++i)
{
buffer[i] = i;
}
int sx,sy,w,h;
//thread1, preparing Transite values
InputData th1_input;
sx = 0; sy = 0; w = 80; h = 90; //(80x90) image processing
th1_input.width = w;
th1_input.height = h;
th1_input.OriginW = W;
th1_input.data = &buffer[sy*W+sx];
th1_input.reserved = 1;
th1_input.flag = TRUE;
_beginthread(ThreadProcessing,0,&th1_input);
//thread2, preparing Transite values
InputData th2_input;
sx = 10; sy = 10; w = 50; h = 50; //(50x50) image processing
th2_input.width = w;
th2_input.height = h;
th2_input.OriginW = W;
th2_input.data = &buffer[sy*W+sx];
th2_input.reserved = 2;
th2_input.flag = TRUE;
_beginthread(ThreadProcessing,0,&th2_input);
//thread3, preparing Transite values
InputData th3_input;
sx = 10; sy = 10; w = 20; h = 20; //(10x10) image processing
th3_input.width = w;
th3_input.height = h;
th3_input.OriginW = W;
th3_input.data = &buffer[sy*W+sx];
th3_input.reserved = 3;
th3_input.flag = TRUE;
_beginthread(ThreadProcessing,0,&th3_input);
//wait until all thread is finished.
while( th1_input.flag || th2_input.flag || th3_input.flag)
{
Sleep(100);
}
//Data buffer release
delete[] buffer;
}
void ThreadProcessing(void* pParam){
//copy struct data to variable
int w = ((InputData*)pParam)->width;
int h = ((InputData*)pParam)->height;
int ow = ((InputData*)pParam)->OriginW;
//Processing Sum(v^2.)
int v;
double sum=0;
for(int j=0; j<h; ++j)
{
for(int i=0; i<w; ++i)
{
v = ((InputData*)pParam)->data[j*ow+i];
sum += (v*v);
}
}
printf("%d thread value = %lf\n", ((InputData*)pParam)->reserved , sum);
((InputData*)pParam)->flag = FALSE;
}
Please leave comment if the source code has problem.
Thank you~


No comments:
Post a Comment