задача такова: Один поток готовит матрицу в памяти M = 1000х1000 байт со случайными числами от 0 до 255. Другой поток в это время принимает с клавиатуры два числа X, Y, а третий поток – готовит на экране окно для вывода результатов расчетов. Как только данные с клавиатуры введены – из подготовленного массива выбирается байт с индексом (X,Y) и выводится на экран в окне третьего потока.
Задача решена, но есть недочет, сказали что нет синхронизации вывода печати с массивом. Помогите пожалуйста!
Код: Выделить всё
#include <windows.h>
#include <iostream.h>
#include <process.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int mas[1000][1000],i,j,x,y;
bool zapolnilsa=false;
HANDLE ev1,ev2;
void thread1(void *)
{
srand((int)time(NULL));
for(i=0;i<1000;i++)
{
for(j=0;j<1000;j++)
{
mas[i][j]=rand()%256;
}
}
zapolnilsa=true;
}
void thread2(void *)
{
cout<<"Enter x=";
cin>>x;
cout<<"Enter y=";
cin>>y;
SetEvent(ev1);
}
void thread3(void *)
{
while(zapolnilsa!=true)
{}
WaitForSingleObject(ev1, INFINITE);
cout<<"mas["<<x<<"]["<<y<<"]="<<mas[x][y]<<"\n";
SetEvent(ev2);
CloseHandle(ev1);
}
void main(void)
{
ev1=CreateEvent(NULL, FALSE, FALSE, "event1");
ev2=CreateEvent(NULL, FALSE, FALSE, "event2");
_beginthread(thread1,0,NULL);
_beginthread(thread2,0,NULL);
_beginthread(thread3,0,NULL);
WaitForSingleObject(ev2, INFINITE);
}