Voglio leggere una stringa dalla riga di comando tramite getline()
in C++.Come implementare il timeout per getline()?
Per quello voglio aggiungere un timer di 5
sec. Se nessuna stringa viene letta, il programma terminerà.
Come posso fare questo?
Voglio leggere una stringa dalla riga di comando tramite getline()
in C++.Come implementare il timeout per getline()?
Per quello voglio aggiungere un timer di 5
sec. Se nessuna stringa viene letta, il programma terminerà.
Come posso fare questo?
ne dite:
/* Wait 5 seconds. */
alarm(5);
/* getline */
/* Cancel alarm. */
alarm(0);
In alternativa è possibile utilizzare setitimer
.
Come R. Martinho Fernandes richiesto:
La funzione alarm
sistemi per il processo corrente per ricevere un SIGALRM in 5 secondi dalla chiamata. L'azione predefinita per un SIGALRM
si per terminare il processo in modo anomalo. Chiamando alarm(0)
disattiva il timer.
Mi chiedo se c'è un modo per chiudere e riaprire stdin o qualcosa per superare la dichiarazione getline ...? – sje397
@cnicutar Thnq. ha funzionato: P –
e finalmente ricevo l'output come "Sveglia". Come sopprimere quello? grazie @cnicutar –
ok, attendere 5
sec, e terminate
se non ci fosse di ingresso:
#include <thread>
#include <atomic>
#include <iostream>
#include <string>
int main()
{
std::atomic<bool> flag = false;
std::thread([&]
{
std::this_thread::sleep_for(std::chrono::seconds(5));
if (!flag)
std::terminate();
}).detach();
std::string s;
std::getline(std::cin, s);
flag = true;
std::cout << s << '\n';
}
+1 per la soluzione standard, hehe –
senza l'uso di fili pllzzz ... –
@ user2164410 - perché no - è il solito modo di gestire tali requisiti. Sarebbe altrettanto facile consentire la segnalazione di un ingresso linea prima dei 5 secondi è, piuttosto che attendere la fine dell'intervallo. –
@RandyHoward: Non credo che questo è un duplicato esatto. 'getline()' è molto più semplice da usare e sapere come aggiungere un contatore ad esso sarebbe utile per coloro che sono nuovi. Questa domanda dovrebbe rimanere legittima. –
@kassak: No, non è ancora un duplicato esatto, le risposte lo dimostrano, penso. Ad ogni modo, penso che questa sia una domanda utile, perché 'getline()' è usato parecchio, e sapere come usarlo sarebbe utile per i futuri lettori. Solo i miei 2 centesimi. –
StackOverflow non è il posto giusto per questa domanda. Non scriviamo il tuo codice per te. È necessario eseguire la propria codifica e, se non si è sicuri del motivo per cui qualcosa non funziona come previsto, inserire il codice con una spiegazione di ciò che si aspettava che facesse e di ciò che effettivamente sta facendo, inclusi tutti i messaggi di errore. Vedi [su StackOverflow] (http://stackoverflow.com/about). –