2015-04-28 2 views
0

Я пытаюсь сказать одному потоку, что нормально продолжать вычисления после того, как другой поток считывает данные из именованного канала. В настоящее время у меня есть бесконечный цикл, который каждый раз проверяет новые данные. Но это неэффективно, так как он потребляет 100% процессора ...Синхронизация потоков и сигнализации

Мой вопрос: есть ли способ подождать, пока один поток проверит новые данные и скажет другой теме, что это нормально продолжать (что-то вроде сигнала)?

+7

Ваша проблема заключается именно в том, что для решения существует [условие переменной] (http://en.cppreference.com/w/cpp/thread/condition_variable). – huu

+0

В этой ситуации имеет смысл использовать мьютекс. Проверьте это [link] (https://stackoverflow.com/questions/4989451/mutex-example-tutorial) – VirtualSnake

ответ

-2

Qt имеет все, что вы хотите, QThread работает хорошо с сигналами и слотами.

+1

Стандартная библиотека C++ 11 также имеет все необходимое и, как правило, будет первым рассмотренным вариантом, но с учетом вопрос подразумевает существующий код с резьбой - то, что уже используется в библиотеке, возможно, тоже будет использовано ... –

+0

Qt можно использовать в его вопросе, он спросил, и я ответил, что проблема? – klatoverato

0

Существуют различные решения для вашей проблемы:

  • Сигналы и слоты модель Qt
  • C++: ++ Boost.Signals2 или Boost.Signals (устаревшее)
  • C: libsigC++ - шаблон на основе
  • C++: sigslot
  • C++: XLObject - основанный на шаблоне Qt-ориентированный.
  • C++: Сигналы
  • C: Libevent - многопоточный, platformindependent
  • C: libev - минимальная альтернатива Libevent.

Посмотрите на них и найдите тот, который подходит вам для вас.

Смежные вопросы