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

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

Восстановить пароль Регистрация
 
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 14:44     Заставить pthread подождать, до выполнения условия #1
есть поток типы pthread.
Нужно заставить его подождать, до выполнения условия
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2014, 14:44     Заставить pthread подождать, до выполнения условия
Посмотрите здесь:

<pthread.h> Где взять. C++
библиотека pthread.h в Code::Blocks C++
C++ не работает pthread.h в Dev-c++
Проверить матрицу на выполнения условия C++
Pthread, поток, передающий значение по указателю C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.04.2014, 14:58     Заставить pthread подождать, до выполнения условия #2
condition_variable из 11 стандарта, или руками создать класс, и в нем будет метод wait() в нем вызывать что то вроде слипа до выполнения определенного условия
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 14:58  [ТС]     Заставить pthread подождать, до выполнения условия #3
насчет стандарта можно поподробнее или ссылку?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.04.2014, 15:04     Заставить pthread подождать, до выполнения условия #4
Вот тут про них есть
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 15:09  [ТС]     Заставить pthread подождать, до выполнения условия #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;
Объявил как в примере.
Библиотеку добавил
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.04.2014, 15:29     Заставить pthread подождать, до выполнения условия #6
Цитата Сообщение от diplomat1129 Посмотреть сообщение
Библиотеку добавил
какую? Вы имеет ввиду заголовочный файл подключили?
а Ваш компилятор поддерживает 11ый стандарт с++?
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 15:31  [ТС]     Заставить pthread подождать, до выполнения условия #7
да.заголовочный файл.
у меня стоит mint 15.
компилятор g++
как проверить поддерживает ли?
и если не поддерживает то как быть?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.04.2014, 15:48     Заставить pthread подождать, до выполнения условия #8
Цитата Сообщение от diplomat1129 Посмотреть сообщение
и если не поддерживает то как быть?
Цитата Сообщение от aLarman Посмотреть сообщение
или руками создать класс, и в нем будет метод wait() в нем вызывать что то вроде слипа до выполнения определенного условия
Цитата Сообщение от diplomat1129 Посмотреть сообщение
как проверить поддерживает ли?
посмотрите версию g++ -v и в инете загуглить что именно в данной версии g++ из 11го стандарта поддерживается
diplomat1129
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 83
11.04.2014, 15:54  [ТС]     Заставить pthread подождать, до выполнения условия #9
а какие еще есть варианты кроме condition variable?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.04.2014, 16:04     Заставить pthread подождать, до выполнения условия #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 минуту
правда реализация оч кривая, но есть над чем поразмыслить
DrOffset
6418 / 3792 / 876
Регистрация: 30.01.2014
Сообщений: 6,579
12.04.2014, 00:11     Заставить pthread подождать, до выполнения условия #11
diplomat1129, так в pthread есть свой собственный condion_variable. Правильней всего использовать его. Там чуть пониже есть пример.

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

Добавлено через 2 минуты
Цитата Сообщение от aLarman Посмотреть сообщение
condition_variable из 11 стандарта
Под Linux, кстати, std::condition_variable реализуется как раз через pthread. Как собственно и вся многопоточность из std::.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
13.04.2014, 12:01     Заставить pthread подождать, до выполнения условия #12
Цитата Сообщение от DrOffset Посмотреть сообщение
Оно будет только делать вид, что ждет, а на самом деле дико жрать процессорное время...
usleep же
DrOffset
6418 / 3792 / 876
Регистрация: 30.01.2014
Сообщений: 6,579
13.04.2014, 12:49     Заставить pthread подождать, до выполнения условия #13
Цитата Сообщение от aLarman Посмотреть сообщение
usleep же
Разверни мысль.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.04.2014, 09:12     Заставить pthread подождать, до выполнения условия #14
ну будет переключение на другую задачау пока Usleep, с параметром 1 да будет %50 грузить если чуть больше сделать будет меньше грузить
DrOffset
6418 / 3792 / 876
Регистрация: 30.01.2014
Сообщений: 6,579
14.04.2014, 10:01     Заставить pthread подождать, до выполнения условия #15
aLarman, вот именно. Оно будет переключаться постоянно из-за малого интервала. Об этом я и говорил. ОС будет отдавать кванты времени потоку, который ничего не делает. А больший интервал поставить тоже нехорошо, потому что тогда может вноситься неприемлемая задержка в реакцию на события. Скажем, поступил сигнал о завершении, а мы все еще ждем таймаут.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.04.2014, 10:09     Заставить pthread подождать, до выполнения условия #16
я не говорил о том что решение идеально

Не по теме:

DrOffset, а есть мютексы в стандарте языка вышедшего до 11 с++?

DrOffset
14.04.2014, 10:39
  #17

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
DrOffset, а есть мютексы в стандарте языка вышедшего до 11 с++?
В стандарте до С++11, не было понятия многопточности вообще. Поэтому вся многопоточность ложилась на плечи системных библиотек. А то, что сейчас в std::thread по большей части перекочевало из boost, т.е. если хочется юзать кроссплатформенную многопоточность в С++03, то это в boost.

aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.04.2014, 10:53     Заставить pthread подождать, до выполнения условия #18
DrOffset, ок, тогда чего ТС мучается с pthread пусть юзает boost, там и мютексы есть и condition_variable
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 11:07     Заставить pthread подождать, до выполнения условия
Еще ссылки по теме:

C++ Определить значение переменной А в зависимости от выполнения определенного условия
Двумерные массивы. Проверка условия после выполнения расчетов C++
C++ Как сделать, чтобы после выполнения условия, программа не проверяла следующие?

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

Или воспользуйтесь поиском по форуму:
DrOffset
6418 / 3792 / 876
Регистрация: 30.01.2014
Сообщений: 6,579
14.04.2014, 11:07     Заставить pthread подождать, до выполнения условия #19
Цитата Сообщение от aLarman Посмотреть сообщение
тогда чего ТС мучается с pthread пусть юзает boost, там и мютексы есть и condition_variable
Не знаю. Но мучением я бы это не назвал. При программировании под Linux знание POSIX threads точно лишним не будет. Тем более что в них есть все вышеперечисленное и даже чуть больше. Другое дело, что оно не объектно-ориентированное, это да.
Yandex
Объявления
14.04.2014, 11:07     Заставить pthread подождать, до выполнения условия
Ответ Создать тему
Опции темы

Текущее время: 13:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru