Тайм-аут C ++ на getline - PullRequest
       5

Тайм-аут C ++ на getline

1 голос
/ 08 июля 2010

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

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

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

Ответы [ 4 ]

1 голос
/ 08 июля 2010

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

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

0 голосов
/ 08 июля 2010

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

0 голосов
/ 08 июля 2010

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

0 голосов
/ 08 июля 2010

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

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

...