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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ По введенному номеру единицы измерения и пути выдать значение в метрах http://www.cyberforum.ru/cpp-beginners/thread404173.html
Оператор выбора Написать программу, которая бы по введенному номеру единицы измерения (1-миллиметр, 2-сантиметр, 3-метр, 4-километр) и пути S выдавала бы соответствующее значения в метрах.
C++ Задача по теории вероятностей Помоги пожалуйста написать программу: Два игрока играют в игру с равной возможностью выигрыша, на следующих условиях, игра продолжается до того момента, когда один из игроков набирает n выигрышей. Перед началом игры они образуют призовую ставку. По независящим от игроков обстоятельствам игра заканчивается с определенным счетом, спрашивается, в каком отношении нужно поделить призовую... http://www.cyberforum.ru/cpp-beginners/thread404170.html
Написать программу, которая: 1)выводит текст на экран дисплея; 2)определяет количество предложений текста и количество слов в каждом предложении; C++
С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки текста не должна превышать 70 символов). Имя файла должно иметь расширение DAT. Написать программу, которая: 1)выводит текст на экран дисплея; 2)определяет количество предложений текста и количество слов в каждом предложении; 3)по нажатию произвольной клавиши поочередно...
C++ Задача на структуры (С++)
Определите структуру или класс для представления записи информации о сданных студентом экзаменах (фамилия студента, число экзаменов, массив полученных оценок). Определите необходимые функции (или методы класса) для обработки отдельного объекта (например, метод, проверяющий, сданы ли все экзамены на 4 и 5). Используя спроектированный тип, напишите функцию или класс для обработки массива структур....
C++ Стеки, очереди. http://www.cyberforum.ru/cpp-beginners/thread404121.html
Здравствуйте, прошу помочь решить задачи. Просьба с комментариями,т.к. не очень хорошо понимаю. 1.Сформировать файл из символов и за один просмотр файла напечатать элементы файла в следующем порядке: сначала все знаки препинания в исходном порядке, а затем все согласные в обратном порядке. 2.Сформировать файл из натуральных чисел и с помощью очереди за один просмотр файла напечатать...
C++ Как правильно передать в процедуру массив строк char*? Нужно чтобы процедура возвращала измененный массив. Пытаюсь так: Void sss(char**arr) { *arr="i"; } возвращает segmentation fault. подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
11.12.2011, 15:48     Помогите создать программу с событием на с++
Цитата Сообщение от 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);
}
 
Текущее время: 02:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru