С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Заставить pthread подождать, до выполнения условия - C++

11.04.2014, 14:44. Просмотров 413. Ответов 18
Метки нет (Все метки)

есть поток типы pthread.
Нужно заставить его подождать, до выполнения условия
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2014, 14:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заставить pthread подождать, до выполнения условия (C++):

Как аннулировать потоки, которые заблокированы по переменной условия (pthread)? - C++
И никак, что ли не аннулировать, получается? Вот, допустим, есть несколько потоков которые заблокированы по переменной условия: ...

Проверить матрицу на выполнения условия - C++
Проверить матрицу на выполнения условия AT = -A Помогите, пожалуйста. Не знаю как сделать

Вывести сообщение в случае выполнения условия - C++
Подскажите: Если в последнем цикле он не находит число,то как вывести на экран в этом случае ответ,вроде: Такого числа не найдено. ...

Вычислить значение s в зависимости от выполнения условия - C++
я пока полный ламер, а решение нужно, не могли бы вы помочь мне написать программу в С++, условие такое : S = x-y+z-t, если среди...

Двумерные массивы. Проверка условия после выполнения расчетов - C++
Дан двумерный массив. Составить программу, которая определяет максимальное из двух чисел: суммы элементов k-й строки и суммы элементов s-го...

Определить значение переменной А в зависимости от выполнения определенного условия - C++
Дан вещественный массив S .Определить значения переменной А по следующему правилу : переменной присвоить значение 1, если положительных...

18
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
11.04.2014, 14:58 #2
condition_variable из 11 стандарта, или руками создать класс, и в нем будет метод wait() в нем вызывать что то вроде слипа до выполнения определенного условия
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 14:58  [ТС] #3
насчет стандарта можно поподробнее или ссылку?
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
11.04.2014, 15:04 #4
Вот тут про них есть
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 15:09  [ТС] #5
NMClient.cpp:68:3: error: ‘condition_variable’ is not a member of ‘std’
NMClient.cpp:68:27: error: expected ‘;’ before ‘cv’

C++
1
std::condition_variable cv;
Объявил как в примере.
Библиотеку добавил
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
11.04.2014, 15:29 #6
Цитата Сообщение от diplomat1129 Посмотреть сообщение
Библиотеку добавил
какую? Вы имеет ввиду заголовочный файл подключили?
а Ваш компилятор поддерживает 11ый стандарт с++?
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 15:31  [ТС] #7
да.заголовочный файл.
у меня стоит mint 15.
компилятор g++
как проверить поддерживает ли?
и если не поддерживает то как быть?
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
11.04.2014, 15:48 #8
Цитата Сообщение от diplomat1129 Посмотреть сообщение
и если не поддерживает то как быть?
Цитата Сообщение от aLarman Посмотреть сообщение
или руками создать класс, и в нем будет метод wait() в нем вызывать что то вроде слипа до выполнения определенного условия
Цитата Сообщение от diplomat1129 Посмотреть сообщение
как проверить поддерживает ли?
посмотрите версию g++ -v и в инете загуглить что именно в данной версии g++ из 11го стандарта поддерживается
0
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 15:54  [ТС] #9
а какие еще есть варианты кроме condition variable?
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
11.04.2014, 16:04 #10
diplomat1129, мне кажется я 2 раза его написал самому реализовать что то наподобие такой штуки псевдокод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Cond_Variable
{
bool Result;
public:
Cond_Variable():Result(false){}
void notify()
{
Result = true;
}
void wait()
{
while(!Result)
{
usleep(1);
}
}
}
Добавлено через 1 минуту
правда реализация оч кривая, но есть над чем поразмыслить
1
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
12.04.2014, 00:11 #11
diplomat1129, так в pthread есть свой собственный condion_variable. Правильней всего использовать его. Там чуть пониже есть пример.

Цитата Сообщение от aLarman Посмотреть сообщение
правда реализация оч кривая, но есть над чем поразмыслить
Оно будет только делать вид, что ждет, а на самом деле дико жрать процессорное время...

Добавлено через 2 минуты
Цитата Сообщение от aLarman Посмотреть сообщение
condition_variable из 11 стандарта
Под Linux, кстати, std::condition_variable реализуется как раз через pthread. Как собственно и вся многопоточность из std::.
1
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
13.04.2014, 12:01 #12
Цитата Сообщение от DrOffset Посмотреть сообщение
Оно будет только делать вид, что ждет, а на самом деле дико жрать процессорное время...
usleep же
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
13.04.2014, 12:49 #13
Цитата Сообщение от aLarman Посмотреть сообщение
usleep же
Разверни мысль.
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
14.04.2014, 09:12 #14
ну будет переключение на другую задачау пока Usleep, с параметром 1 да будет %50 грузить если чуть больше сделать будет меньше грузить
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
14.04.2014, 10:01 #15
aLarman, вот именно. Оно будет переключаться постоянно из-за малого интервала. Об этом я и говорил. ОС будет отдавать кванты времени потоку, который ничего не делает. А больший интервал поставить тоже нехорошо, потому что тогда может вноситься неприемлемая задержка в реакцию на события. Скажем, поступил сигнал о завершении, а мы все еще ждем таймаут.
0
14.04.2014, 10:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 10:01
Привет! Вот еще темы с ответами:

Как сделать, чтобы после выполнения условия, программа не проверяла следующие? - C++
Мне нужно чтобы после вывода текста " нет значений x и z" программа больше ничего не выводила, но после этого она так же пишет " z равен" и...

Написать программу, которая будет обращать в ноль элемент матрицы в случае выполнения условия - C++
Задача: Написать программу, которая будет обращать в ноль элемент матрицы, если f(x)+ff(x)<0, где f и ff - некоторые функции, выполняющие...

В заданных массивах найти количество элементов равных нулю и заменить их на -100 в случае выполнения условия - C++
Помогите пожалуйста. В массивах Х1..Х5, Y1..Y7, Z1..Z14 определить количество равных нулю элементов. Если их больше половины, то первый и...

Pthread - C++
при компиляции код работает и все выводит и выполняет алгоритм но стоит запустить с командной строки, выдает ошибку "Запуск программы...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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