2010-07-07 2 views
1

Мне нужно, чтобы все мои потоки периодически проверялись, чтобы они все еще работали, чтобы они могли автоматически завершаться, когда программа заканчивается. Для всех, кроме одного из них, это всего лишь проверка переменной состояния, но последняя является потоком взаимодействия с пользователем, и его цикл будет бесконечно ждать на входе пользователя, проверяя только переменную состояния, когда пользователь вводит команду , На этом этапе программа терпит неудачу, так как класс не может работать должным образом, когда он не запущен. В идеале, однако, я бы хотел не дойти до этого.C++ timeout on getline

Я думаю, что лучшим решением, если это возможно, является тайм-аут на линии getline, но в случае, если это невозможно или хороший вариант, я открыт для любой опции, которая позволит потоку завершить работу аккуратно.

В стороне, я вижу много упоминаний о std :: getline. Кажется, что getline работает, использую ли я пространство имен или нет. Является ли это псевдонимом другого и который является правильным для использования?

+0

Какую библиотеку threading вы используете? –

+0

Что касается вашего дополнительного вопроса: ознакомьтесь с зависимым от аргументов поиском. – sbi

ответ

1

Нет (стандартного) способа установить тайм-аут на std::getline. В частности, стандартная библиотека C++ не знает существования нитей

Чтобы ответить на ваш второй вопрос, версия std::getline соответствует стандарту в пространстве имен.

+0

Вы не ответили на второй вопрос. ADL часто устраняет необходимость в квалификации пространства имен, но вы всегда используете 'std :: getline' для любой современной реализации, о которой я слышал. –

0

Возможно, самый простой способ сделать это - открутить еще один поток, с единственной целью - выполнить getline().

google возвращает this result, что дает вам пример, хотя он сильно зависит от Win32. Тем не менее, вы должны иметь возможность переносить его на какую-либо библиотеку потоков, которую вы используете.

0

Если ваши потоки не имеют какой-либо очистки, что им нужно сделать, альтернативным решением было бы позвонить exit, когда вы хотите завершить свой процесс. exit прекратит все потоки и завершит процесс.

0

Вам нужна еще одна нить, чтобы сигнализировать пользовательскую нить.
Как вы это сделаете, это будет зависеть от используемой библиотеки потоков.

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

  • Нет связанных вопросов^_^