Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129

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

10.03.2014, 23:18. Показов 2160. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2014, 23:18
Ответы с готовыми решениями:

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

не могу разобраться..
Вывести на экран все натуральные числа из диапазона от A до B, в записи которых цифра 7 встречается ровно N раз. При отсутствии чисел с...

Не могу разобраться с С++
Всем Привет, так я кодеру в Делфи. Не давно нашел что мне нужно но оy написан на С. Вот и начался у меня проблемы с кодами. Вот часть...

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

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

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

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

я вообще , если честно , не могу никак понять , что же это за события - hEvent1, hEvent2 ? Пожаалуйста , можете объяснить , хотя бы немного , простыми словами ? Я чисто суть не могу уловить (
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.03.2014, 00:20
Цитата Сообщение от 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
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
11.03.2014, 00:23
Цитата Сообщение от alsav22 Посмотреть сообщение
Удалил.

Не по теме:


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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2014, 00:23
Помогаю со студенческими работами здесь

События и семафоры. Не могу понять где ошибка в коде
Код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; #define NUMBER_OF_THREADS 3 using namespace std; ...

Указатель не могу разобраться
Здравствуйте. есть строка к примеру tmp=int(TEMP.number2-48); а что значит tmp*=(int(TEMP.number1-48)); именно звездочка после...

не могу разобраться с матрицей.
Здравствуйте. Дело в том что я лох в программировании На C++ и нужна помощь с задачей. Задача: Дана матрица А(4,3) 1. Найти...

Не могу разобраться с программой в С++
Написала программку на С++, он ее запускает и как я понимаю выполняет, но вот результатов я не вижу( И вот что мне выдает сама программа: ...

Не могу разобраться с наследованием
есть клас class Liquid{ private: string name; float density; public: Liquid(){ ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru