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

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

Войти
Регистрация
Восстановить пароль
 
sp11
Сообщений: n/a
#1

Threads и Events - C++

23.05.2010, 13:13. Просмотров 367. Ответов 0
Метки нет (Все метки)

Здравствуйте!

Вопрос следующий:

Есть основная программа, и поток, создающийся несколько раз!
Стоит задача - не выполнять в основной программе некоторое действие, пока ВСЕ созданные на данный момент времени потоки не выполнят своё некоторое действие. И программа и потоки фактически работают в цикле, потоки не завершаются.
То есть:
1. Основная программа из вне получает некоторое событие.
2. Сообщает с помощью Event потокам что пора выполнить некоторое действие.
3.(!) Потоки сообщают основной программе что нужно опять ждать события из вне, и сами снова переходят в ожидание Event от основной программы(!)

Вот вопрос собственно в 3 пункте. Как программе не начать ожидать события из вне, пока ВСЕ потоки не выполнили некоторое действие и снова не перешли в режим ожидания события от основной программы.

Добавлено через 22 минуты
как это реализовать на этом простейшем примере:

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
void Thread( void* pParams )
{
int i, num = 0;
 
while ( TRUE )
{
WaitForSingleObject( hEvent2, INFINITE );
a[  ] = num;
num++;
 
//ResetEvent(hEvent2);
//?...
//?...
}
}
 
int main( void )
{
hEvent2 = CreateEvent( NULL, FALSE, FALSE, NULL );
 
CreateThread(NULL, 0, Thread, /*0*/, 0, NULL);
CreateThread(NULL, 0, Thread, /*1*/, 0, NULL);
CreateThread(NULL, 0, Thread, /*2*/, 0, NULL);
while( TRUE )
{ 
// ?..
// ?..
printf( "%d %d %d\n", a[ 0 ], a[ 1 ], a[ 2 ]);
SetEvent( hEvent2 );
}
return 0;
}
События которые сейчас написаны работают естественно не правильно.
При создании потока в параметрах передаётся номер элемента массива который будет плюсовать этот поток.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2010, 13:13     Threads и Events
Посмотрите здесь:

Threads - C++
Есть массив потоков в количестве 10 и есть функция, которую надлежит выполнить 50 раз, как этими 10-ю потоками выполнить её 50 раз?

Сканирование компьютеров на присутствие в сети онлайн. #threads #c++11 #ping #icmp - C++
Пишу программу, которая будет проверять наличие компьютеров в сети. Нашел на msdn код для отправки ICMP запроса. Пытаюсь использовать этот...

IO и threads - C#
Посоветуйте плиз, что делать! возникает ошибка когда разные нитки пишут в один файл. "Probable IO race condition detected". вывел...

Threads и классы - Java SE
Есть вопрос. Как известно создавая класс с интерфейсом Runnable мы потом можем добавить его в класс потока. А вот как узнать какой класс...

Threads + Timer - C#
у меня стоит задача выполнять какие-то действия в нескольких потока с какой-то периодичностью весь код я свел просто к модели дабы не...

datagridview and threads - C#
В общем такая беда, хочу что бы данные брались из таблицы и передавались в качестве аргумента в новый поток и суть в том что в таблице...

Параллельная программа (threads) - C Linux
Мне нужно распараллелить программу: решения слау методом вращений. Вот, что я написала: typedef struct DATA { double *a; ...

boost::threads vs gcc 4.8.2 - Boost C++
Добрый день, ребят такая проблема, на centos 6.3 стояли gcc 4.4.x и boost версию точно не знаю, сверху накатил gcc 4.8.2 из исходников,...

RichTextBox + Sockets + Threads - C++/CLI WinForms
вобщем в клиенте реализую прием сообщения от сервера в отдельном потоке: private: void Recv_Client(Object^ o) { ...

Threads, Sockets от новичка - Python
Всем привет. Я в питоне новичок, но очень уж хочется разобраться. Собственно, ниже лист вопросов, на которые я вразумительного ответа для...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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