Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kurvochka
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 16
#1

Помогите создать программу с событием на с++ - C++

11.12.2011, 11:52. Просмотров 684. Ответов 4
Метки нет (Все метки)

Доброе утро всем! Мне всегда помогали на этом форуме и хотела еще раз обратиться к Вам! Вот задали опять задание новое. Если кто-то знает эту может поможет чем сможет! Всем буду очень благодарна!!
Вот задание:
1. Реализовать с помощью механизма событий задачу, состоящую из трех потоков Р1, Р2 и Р3. Поток Р1 информирует потоки Р2 и Р3 о событии А, состоявшейся в потоке Р1 (рис. а).
2. Реализовать с помощью механизма событий задачу, состоящую из трех потоков Р1, Р2 и Р3. Поток Р1 информирует поток Р2 о событии А, состоявшейся в потоке Р1. После этого поток Р2 информирует поток Р3 о событии В, состоявшейся в потоке Р2 (рис.б).
3. Реализовать с помощью механизма событий задачу, состоящую из трех потоков Р1, Р2 и Р3. Поток Р1 ожидает наступления событий А и В в потоках Р2 и Р3, соответственно (рис.в).

Заранее Всем спасибо за помощь и за внимание!!
0
Миниатюры
Помогите создать программу с событием на с++  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2011, 11:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите создать программу с событием на с++ (C++):

Создать программу-счётчик слов (помогите доработать код) - C++
Эта программа видит на входе "Ма-ма -мыла раму. Рама-, мыла маму. Мама была рамой. А у Саши 0 - шуры муры. А у Шуры нет" а на выходе должно...

Помогите пож создать программу на С++ чтобы выводился список только тех студентов, у которых больше одной двойки - C++
Пример решения задачи Задача. Входной файл st.txt содержит сведения о сдаче студентами группы экзаменационной сессии. Каждая запись...

Поток не сигнализирует событием о своем окончании - C++
Всем привет, нужна помощь задача такая. Есть метод у меня (mnThread) который постоянно поставляет данные, процедура (get_data) эти данные...

Создать программу,которая находит минимальное из 3х чисел. Для нахождения минимального числа создать функцию - C++
Создать функцию - double mini (double a, double b, double c), где a,b,c - задание числа. Спасибо за помощь!

Помогите создать(( - C++
нужно создать файл с расширением MFC, но у меня его нету( как сделать, чтобы можна было сделать? вот скриншот ...

помогите создать класс - C++
нужно создать класс который будет организовывать турнирную таблицу. т.е нам в файле дан список результатов команд : "команда1 - команда2 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kurvochka
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 16
11.12.2011, 11:55  [ТС] #2
Вот рисунок побольше, а то первый очень маленький вышел.
0
Миниатюры
Помогите создать программу с событием на с++  
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
11.12.2011, 15:48 #3
Цитата Сообщение от Kurvochka Посмотреть сообщение
1. Реализовать с помощью механизма событий задачу, состоящую из трех потоков Р1, Р2 и Р3. Поток Р1 информирует потоки Р2 и Р3 о событии А, состоявшейся в потоке Р1 (рис. а).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <windows.h>
#include <stdio.h>
#define MAX_THREADS  3
#define XCLOSE_HANDLE(obj, cnt)  {  for(DWORD i = 0u; i < cnt; i++) { CloseHandle(obj[i]); } }
void  setEvent(void);
DWORD WINAPI  ThreadP1(LPVOID);
DWORD WINAPI  ThreadP2(LPVOID);
DWORD WINAPI  ThreadP3(LPVOID);
 
HANDLE threads[MAX_THREADS];
HANDLE events[MAX_THREADS - 1];
BOOL   loop = TRUE;
 
int main(void) {
  events[0] = CreateEvent(NULL, TRUE, FALSE, NULL);
  events[1] = CreateEvent(NULL, TRUE, FALSE, NULL);
  if(! events[0] || ! events[1])
        return 1;
 
  threads[0] = CreateThread(NULL, 0u, ThreadP1, NULL, 0u, NULL);
  threads[1] = CreateThread(NULL, 0u, ThreadP2, NULL, 0u, NULL);
  threads[2] = CreateThread(NULL, 0u, ThreadP3, NULL, 0u, NULL);
 
  WaitForMultipleObjects(MAX_THREADS, threads, TRUE, INFINITE);
 
  XCLOSE_HANDLE(threads, MAX_THREADS);
  XCLOSE_HANDLE(events, MAX_THREADS - 1);
  printf("End threads...\n");
  getchar();
  return 0;
}
 
 
void  setEvent(void) {
   for(DWORD i = 0u; i < MAX_THREADS - 1; i++)
        SetEvent(events[i]);
}
 
// главный поток по генерации события
DWORD WINAPI  ThreadP1(LPVOID p) {
    DWORD cur = 0u, sec = GetTickCount();
    while(1) {
        cur = GetTickCount();
        if((cur - sec) > 2000u) {  // событие генерируется через каждые 2 секунды
              setEvent();
              sec = cur;
        }
        if(GetAsyncKeyState(VK_ESCAPE)) {  // для выхода клав-esc
              loop ^= loop;
              setEvent();
              return 0u;
        }
    }
    return (0u);
}
 
// поток P2 для результата события выводит в заголовок-калькулятора
DWORD WINAPI  ThreadP2(LPVOID p) {
  WinExec("calc.exe", SW_SHOW);
  HWND  wnd = ::GetForegroundWindow();
  int   cnt = 0;
  CHAR  buf[32] = {'\0'};
  while(wnd != NULL && loop) {
         if(WaitForSingleObject(events[0], INFINITE) == WAIT_OBJECT_0) {
                wsprintfA(buf, "WORK THREAD P2 - %d", ++cnt);
                SetWindowTextA(wnd, buf);
                ResetEvent(events[0]);
          }
  }
  if(wnd)
      PostMessage(wnd, WM_QUIT, 0, 0);
  return (0u);
}
 
// поток P3 для результата события выводит в консоль
DWORD WINAPI  ThreadP3(LPVOID p) {
  int  cnt = 0;
  while(loop) {
        if(WaitForSingleObject(events[1], INFINITE) == WAIT_OBJECT_0) {
            printf("WORK THREAD P3 - %d\n", ++cnt);
            ResetEvent(events[1]);
        }
  }
  return (0u);
}
2
Kurvochka
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 16
14.12.2011, 17:18  [ТС] #4
Спасибо за первый случай! а остальные 2 никто не знает?

2. Реализовать с помощью механизма событий задачу, состоящую из трех потоков Р1, Р2 и Р3. Поток Р1 информирует поток Р2 о событии А, состоявшейся в потоке Р1. После этого поток Р2 информирует поток Р3 о событии В, состоявшейся в потоке Р2 (рис.б).

3. Реализовать с помощью механизма событий задачу, состоящую из трех потоков Р1, Р2 и Р3. Поток Р1 ожидает наступления событий А и В в потоках Р2 и Р3, соответственно (рис.в).
0
lavan
52 / 52 / 1
Регистрация: 21.03.2009
Сообщений: 371
14.12.2011, 19:01 #5
как то делал задачу, в принципе вам подходит.Вот задание
Написать программу, создающую три потока. Каждый поток выполняет какие-то
вычисления. При чём второму потоку на каком-то этапе вычисления необходимы
результаты работы первого потока, а третьему результаты работы второго
потока. Создавать потоки необходимо в таком порядке: третий, второй,
первый
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include<windows.h>
#include<iostream>
using namespace std;
void thr1(void *);
void thr2(void *);
HANDLE ev1,ev2;
int main() {
    HANDLE ht[2];
    DWORD dwInit[2];
    int ar[3][4];
    for(int i=0;i<3;i++)
    for(int j=0;j<3;j++) {
        ar[i][j]=1+rand()%50;
    }
    for(int i=0;i<3;i++) {
        for(int j=0;j<3;j++){
        cout.width(4);
        cout<<ar[i][j]<<" ";
        }
        cout<<endl;
    }
    ht[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thr1,(void *)ar,0,&dwInit[0]);
    ht[1]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thr2,(void *)ar,0,
    &dwInit[0]);
    ev1=CreateEvent(NULL,FALSE,FALSE,NULL);
    ev2=CreateEvent(NULL,FALSE,FALSE,NULL);
    int sum=0;
    for(int i=0;i<4;i++) {
        if(i==3) {
            WaitForSingleObject(ev2,INFINITE);
            sum+=ar[1][i];
            ar[2][i]=sum;
        }
        sum+=ar[2][i];
    }
    cout<<"after\n\n";
    for(int i=0;i<3;i++) {
        for(int j=0;j<4;j++) {
        cout.width(4);
        cout<<ar[i][j]<<" ";
        }
        cout<<endl;
    }
    CloseHandle(ht[0]);
    CloseHandle(ht[1]);
    CloseHandle(ev1);
    CloseHandle(ev2);
    cin.get();
    return 0;
}
void thr1(void *tptr) {
    int *ptr=(int *)tptr;
    int sum=0;
    for(int i=0;i<4;i++) {
        if(i==3) {
           ptr[0*4+i]=sum;
            break;
        }
        sum+=ptr[0*4+i];
    }
    cout<<endl;
    SetEvent(ev1);
}
void thr2(void *tptr) {
    int *ptr=(int*)tptr;
    int sum=0;
    for(int i=0;i<4;i++) {
        if(i==3) {
        WaitForSingleObject(ev1,INFINITE);
           sum+=ptr[0*4+i];
            ptr[1*4+i]=sum;
            break;
        }
        sum+=ptr[1*4+i];
    }
    SetEvent(ev2);
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2011, 19:01
Привет! Вот еще темы с ответами:

Помогите создать ёлочку из звездочек - C++
Очень надо!!! ПОМОГИТЕ! надо сделать ёлочку в с++ с помощью while

помогите создать графический редактор - C++
я просто толбко начел изучять С++ и немогу создать графический редактор.Помогите пожалуста.

помогите создать загрузчик dll - C++
Пожалуйста кто чем сможет

Помогите создать меню в консоли - C++
Есть код игры змейка и надо сделать меню тут же в консоли, самое простое, в котором есть 'Старт' и 'Выход', а выбор осуществляется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.12.2011, 19:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru