#include <Windows.h>
#include <tchar.h>
#include <strsafe.h>
#define BUF_SIZE 255
DWORD WINAPI MyThreadFunction( LPVOID lpParam );
typedef struct MyData {
int *pontLine;
int *pontCol;
int result;
} MYDATA, *PMYDATA;
int main(){
HANDLE hThreadArray[4];
DWORD dwThreadIdArray[4];
PMYDATA buffer;
int m1[2][3] = {{1,2,5},{4,0,1}};
int m2[3][2] = {{0,2},{1,4},{1,0}};
int product[2][2] = {{0, 0}, {0, 0}};
for(int i=0; i < 2; i++){/
for(int j=0; j < 2; j++){//mesma coisa com as colunas
(buffer[i*2+j]).pontLine = (int*) malloc(3*sizeof(int));
(buffer[i*2+j]).pontCol = (int*) malloc(3*sizeof(int));
for(int k=0; k < 3; k++){
(buffer[i*2+j]).pontLine[k] = m1[i][k];
(buffer[i*2+j]).pontCol[k] = m2[k][j];
}
hThreadArray[i*2+j] = CreateThread(
NULL, // default security attributes
0, // use default stack size
MyThreadFunction,
&buffer[i*2+j],
0, // use default creation flags
&dwThreadIdArray[i*2+j]);
}
}
WaitForMultipleObjects(4, hThreadArray, TRUE, INFINITE);
for (int i = 0; i < 2; i++) {
printf(" %d", buffer[i].result);
}
printf("\n");
for (int i=2; i<4; i++) {
printf(" %d", buffer[i].result);
}
getchar();
return 0;
}
DWORD WINAPI MyThreadFunction( LPVOID lpParam )
{
HANDLE hStdout;
PMYDATA pDataArray;
TCHAR msgBuf[BUF_SIZE];
size_t cchStringSize;
DWORD dwChars;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if( hStdout == INVALID_HANDLE_VALUE )
return 1;
pDataArray = (PMYDATA)lpParam;
int element = 0;
for (int k = 0; k < 3; k++){
element = element + pDataArray->pontCol[k]*pDataArray->pontLine[k];
}
pDataArray->result = element;
return 0;
}
|