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

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

Войти
Регистрация
Восстановить пароль
 
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
#1

Потоки.События.Не могу разобраться - C++

10.03.2014, 23:18. Просмотров 389. Ответов 4
Метки нет (Все метки)

Здравствуйте . Пытался разобраться с синхронизацией нитей , а точнее- с событиями . Нашёл пример :
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
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
HANDLE hEvent1, hEvent2;
int a[5];
HANDLE hThr;
unsigned long uThrID;
void Thread( void* pParams )
{ 
    int i, num = 0;
    while (1)
    { 
        WaitForSingleObject( hEvent2, INFINITE );
        for (i=0; i<5; i++) a[i] = num;
        num++;
        SetEvent( hEvent1 );
    }
}
 
int main( void )
{ 
    hEvent1=CreateEvent( NULL, FALSE, TRUE, NULL );
    hEvent2=CreateEvent( NULL, FALSE, FALSE, NULL );
    hThr=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,NULL,0,&uThrID);
    while(1)
    {
        WaitForSingleObject( hEvent1, INFINITE );
        printf("%d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4]);
        SetEvent( hEvent2 );
    }
    return 0;
}
Не могу понять , как он работает
Когда запускаю- происходит бесконечный вывод 5-ти цифр
Разве так и должно быть?

Росталкуйте , пожалуйста , что происходит вот в этом фрагменте :
C++
1
2
3
4
5
6
while(1)
    {
        WaitForSingleObject( hEvent1, INFINITE );
        printf("%d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4]);
        SetEvent( hEvent2 );
    }
сколько читаю- не пойму никак(
заранее спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 23:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Потоки.События.Не могу разобраться (C++):

Не могу понять как делать задание про шифр Цезаря и потоки - C++
Слезно прошу помочь, сил больше нет... Задание: Пользователь вводит строку, зашифровать ее шифром Цезаря, рандомно найти ключ, от 0 до...

Не могу разобраться с циклом - C++
int _tmain(int argc, _TCHAR* argv) { int x,y; cout &lt;&lt; &quot;Vvedite dva chisla&quot; &lt;&lt; endl; cin &gt;&gt; x &gt;&gt; y; for (int i=1; i&lt;=y; i++) { ...

не могу разобраться с вектором - C++
Доброй ночи. Никак не пойму почему не работает. Есть 3 файла 3.cpp #include &lt;stdio.h&gt; #include &quot;lib/simply.h&quot; int main(void)...

не могу разобраться с Условием! - C++
Напишите программу принимающую на выходе символ оператора с двумя опредантами и выводящую на экран результат вычисления! пример (+ 100...

Не могу разобраться с указателями - C++
Здравствуйте, никак не могу разобраться с этими указателями, вот есть одна функция: //Вводимо матрицю int **Matrix(int n) {int...

не могу разобраться со switch. - C++
мне надо переделать программу через switch, но у меня вылазит ряд ошибок, разобраться с ними не получается, так как не знаю как их...

4
Убежденный
Системный программист
Эксперт С++
15632 / 7141 / 1130
Регистрация: 02.05.2013
Сообщений: 11,582
Записей в блоге: 1
Завершенные тесты: 1
10.03.2014, 23:49 #2
Цитата Сообщение от VASYA_A Посмотреть сообщение
Не могу понять , как он работает
Здесь попеременно выполняются тела циклов while в main и в Thread, а
рулят этим процессом события hEvent1 и hEvent2 - когда одно устанавливается,
второе сбрасывается, потом наоборот, и за счет этого достигается строгая
очередность.

Цитата Сообщение от VASYA_A Посмотреть сообщение
сколько читаю- не пойму никак(
Возможно, Вам лучше сначала почитать что-нибудь по основам
синхронизации в Windows. Например, Рихтера, Харта или Побегайло.
Ну и еще здесь, конечно:

Event Objects
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
0
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
11.03.2014, 00:03  [ТС] #3
Спасибо.
То есть , в функции Thread - сначала с помощью WaitForSingleObject ждём , когда событие hevent2 станет готовым к исполнению, далее в цикле считаем числа и SetEvent - состояние событие поставили в сигнальное

а в мейне всё наоборот.. ( это пока не очень понятно )

я вообще , если честно , не могу никак понять , что же это за события - hEvent1, hEvent2 ? Пожаалуйста , можете объяснить , хотя бы немного , простыми словами ? Я чисто суть не могу уловить (
0
Убежденный
Системный программист
Эксперт С++
15632 / 7141 / 1130
Регистрация: 02.05.2013
Сообщений: 11,582
Записей в блоге: 1
Завершенные тесты: 1
11.03.2014, 00:20 #4
Цитата Сообщение от VASYA_A Посмотреть сообщение
То есть , в функции Thread - сначала с помощью WaitForSingleObject ждём , когда событие hevent2 станет готовым к исполнению, далее в цикле считаем числа и SetEvent - состояние событие поставили в сигнальное
а в мейне всё наоборот
Ну да, вроде того.

Цитата Сообщение от VASYA_A Посмотреть сообщение
я вообще , если честно , не могу никак понять , что же это за события - hEvent1, hEvent2 ? Пожаалуйста , можете объяснить , хотя бы немного , простыми словами ? Я чисто суть не могу уловить
Событие - это объект, который может находиться либо в сигнальном (установлено),
либо в несигнальном (сброшено) состоянии. Пока событие сброшено, любой поток,
который вызовет на нем wait-функцию (WaitForXXXX), сразу же будет отправлен в
"спячку". Т.е. пассивное ожидание. Как только событие перейдет в сигнальное
состояние, поток выйдет из спячки и продолжит работу. Это удобно использовать
для синхронизации потоков, а также для ожидания э-э... событий. Видите -
название Win32-событий как нельзя лучше отражают их суть.

События бывают двух видов - synchronization event и notification event.
То же самое еще называют auto-reset event и manual-reset event, то есть,
авто-сброс и ручной сброс (состояния). Manual-reset event прост - вы вручную
устанавливаете и сбрасываете событие, и его состояние не меняется, пока вы
сами не сделаете это. Эта особенность часто используется для уведомления
одного или нескольких потоков - если несколько потоков ждут одного и того
же события, то при переводе его в сигнальное состояние все они проснутся.
Хоть и нельзя предугадать, кто раньше, а кто позже.

Auto-reset event работает чуть по-другому.
Когда кто-то просыпается из ожидания на событии с авто-сбросом, то это
событие сразу автоматически сбрасывается. Т.е. только один поток пробуждается.
Так, например, можно гарантировать, что только один поток войдет в критический
участок кода. С manual-reset event все потоки сразу ринулись бы в этот
участок и синхронизация была бы нарушена.

Ай, ну в общем, что я объясняю тут, все равно никогда не напишу лучше,
чем в правильных книгах по системному программированию.
Лучше один раз прочесть, чем сто раз спросить на форуме, уж поверьте
1
Убежденный
Системный программист
Эксперт С++
15632 / 7141 / 1130
Регистрация: 02.05.2013
Сообщений: 11,582
Записей в блоге: 1
Завершенные тесты: 1
11.03.2014, 00:23 #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Удалил.

Не по теме:


И зря. Краткость - с.т.
Написали кратко, и по делу, не то, что я.
Зави-и-идую

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2014, 00:23
Привет! Вот еще темы с ответами:

не могу разобраться в программе - C++
Здравствуйте! Программа сортирует методом пузырька числа с плавающей точкой,которые находятся в файле Input.txt Помогите пожалуйста...

Не могу разобраться со строками - C++
Вот задание: Напишите программу поиска в строке знаков пунктуации. Программа должна позволить ввести символьную строку, содержащую знаки...

Не могу разобраться с регуляркой C++ - C++
Привет всем, помогите кто знает, у меня есть строка: string str=&quot;NUM 16093.99 /NUMBER ... /NUMBER /NUMBER&quot;; Возможно ли как то,...

Не могу разобраться с NetBeans C++ - C++
Ребят не подскажите в чём дело. Сначала эту &quot;прогу&quot; на C написал было всё нормально. А вот на C++ не хочет с этими библиотеками. NetBeans...


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

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

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