0
class Test 
{
 public:
 Test();
 static std::condition_variable condVar;
 void notifyCv(); // тут делаем condVar.notify_all()
}

при попытке использовать такую переменную - выдает undefined reference.

void main()
{
 std::mutex mut;
 std::unique_lock<std::mutex> lock(mut);
 while (true) {
 Test::condVar.wait(lock);
 //далаем чтото полезное
 }
}

Дело в том, что создается много экземпляров класса Test, и в этих экземплярах происходит событие, которого нужно постоянно ожидать. А реагировать нужно, если произошло событие в ЛЮБОМ экземпляре.

Если объявлять condVar, не как static, то у каждого экземпляра будет по своему condVar и как тогда ожидать событие от любого из экземпляров, не перебирая их все постоянно в цикле?

upd: да, вопрос похож на дубликат.. то, что static переменную нужно определить - я знаю. Но не пойму, как это сделать с condition_variable..

задан 20 февр. 2019 в 17:01
3
  • Что касается непосредственной ошибки - это прямой дубликат. Что касается самой идеи использования статической переменной - это вопрос отдельный... Commented 20 февр. 2019 в 18:19
  • @AnT Предложенный вами вопрос не про 'cond_var'.. С 'int' все понятно. Наверное сразу надо было написать, что у меня проблема не с самим static как таковым, а с непониманием способа определения статических условных переменных. Так вообще можно? Commented 20 февр. 2019 в 20:03
  • А прямо над main написать что то вида std::condition_variable Test::condVar; Commented 20 февр. 2019 в 23:08

1 ответ 1

0

проблема решилась с помощью комментария @KoVadim.

вне объявления класса добавить:

std::condition_variable Test::condVar;
ответ дан 21 февр. 2019 в 8:19

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.