Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2010, 15:52   #1
@Ivan
 
Регистрация: 23.09.2010
Сообщений: 3
По умолчанию Проблема с массивом

Здравствуйте, помогите пожалуйста
задача такова: Один поток готовит матрицу в памяти M = 1000х1000 байт со случайными числами от 0 до 255. Другой поток в это время принимает с клавиатуры два числа X, Y, а третий поток – готовит на экране окно для вывода результатов расчетов. Как только данные с клавиатуры введены – из подготовленного массива выбирается байт с индексом (X,Y) и выводится на экран в окне третьего потока.
Задача решена, но есть недочет, преподаватель сказал нужно чтобы в третьем потоке(thread3) событие не происходило пока не заполнится массив.

Код:
#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;
 
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;
                        }
                }
        
}
 
void thread2(void *)
{
    cout<<"Enter x=";
        cin>>x;
        cout<<"Enter y=";
        cin>>y;
    SetEvent(ev1); 
 
}
void thread3(void *)
{
//Пока не заполнится массив
 
        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);
}
@Ivan вне форума Ответить с цитированием
Старый 08.10.2010, 09:11   #2
@Ivan
 
Регистрация: 23.09.2010
Сообщений: 3
По умолчанию

Здравствуйте, мне подсказали как переделать, вот переделал, но сказали есть проблема, нет синхронизации вывода печати с массивом. Подскажите пожалуйста как это осуществить!

Код:
#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);
}
@Ivan вне форума Ответить с цитированием
Старый 11.10.2010, 11:46   #3
@Ivan
 
Регистрация: 23.09.2010
Сообщений: 3
По умолчанию

Уважаемые программисты, неужели никто не может подсказать или может я как-то не корректно написал? Помогите пожалуйста!
@Ivan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с массивом Doppelganger Общие вопросы C/C++ 1 12.06.2010 14:12
проблема с массивом kommunist Паскаль, Turbo Pascal, PascalABC.NET 7 27.05.2010 19:00
Проблема с массивом Акашаев Нурлан PHP 2 23.11.2008 14:45
проблема с массивом kommunist Помощь студентам 6 14.11.2007 18:36
проблема с массивом kommunist Помощь студентам 4 31.10.2007 17:11