chiken
#naukaprogramowania #programowanie #cpp

Jak w c++ można zrobić wczytywanie do zmiennej przez określony czas.
Na przykład cin (lub jakaś inna funkcja) czeka 20 sekund i jeśli użytkownik nic nie wpisze program leci dalej.
  • Najlepsze
  • Wszystkie komentarze
A.....a
A.....a
@WhirPool: @chiken: słabe rozwiązanie. Wyciągać wątki do czegoś takiego? Bez jaj...

Jak piszesz na linuxa to zainteresuj się kolego linuksowym select(), które potrafi nasłuchiwać w nieskończoność lub z określonym timeoutem, a w dodatku będzie o niebo lepsze niż startowanie wątków czy jakieś sleepy...

Więcej info w google lub na przykład tutal

A.....a
A.....a
@lionbest: no tak, when_any jeśli na wielu chcesz robić, ale na jednym starczy wait_for. Mi osobiście bardziej brakuje ... . then().then().... Łatwo można by robić łańcuchy handlerów na dane przy czym pisanie jakichś asynchronicznych serwerów było by baaardzo łatwe i bardzo efektywne. Oczywiście inne utilsy jak to when_any też się bardzo przydają... Aż wstyd, że tego nie dodali od razu I W DODATKU W C++17 RACZEJ TEGO ZABRAKNIE... Masakra!
A.....a
A.....a
Może i by było ale std::future jest totalnym niedorozwojem


@lionbest: bo?

Future jest trochę biedne bo nie ma then... jeszcze. Niestety chyba w 17 nie dodają tego jeszcze (bieda w ch***), ale ogółem sama idea i wzorzec future/promise jest bardzo fajnym rozwiązaniem w programowaniu asynchronicznym.
lionbest
@AferaZaAfera: Then ci nie wystarczy, mówię o potrzebie czegoś jak when_any czyli coś co zrobi na wzór selekta, czego obecnie nie da się zaimplementować bez then albo kolejnego async oraz mutexów czy innych conditionali.
lionbest
@AferaZaAfera: Nie no fakt, teraz przeczytałem że pytanie było o zwykły timeout. Mimo wszystko wolałbym mieć waitfor przyjmujące std::future, oraz timer zwracający std::future.
@AferaZaAfera: Nom mnie najbardziej brakuje właśnie tego when_any bo zazwyczaj coś jeszcze asynchronicznie robisz i chcesz mieć możliwość sterowania z konsoli pomimo nie skończenia zadania, zachowując pełną gotowość na reakcję o zakończeniu zadania. Po prostu dwa zadania ścigające się.
lionbest
@AferaZaAfera: Kurde wczoraj nic nie ogarniałem... wystarczył by static.

@chiken: No mniejwięcej coś takiego http://cpp.sh/54glk
Trytka
Trytka
@chiken: To zalezy ( ͡° ͜ʖ ͡°)

W 30 sekund do znalezienia w google ale nie wiem czy bedzie ci pasowac.
WhirPool
WhirPool
@chiken: nie wiem czy da się w ogóle, ale jeżeli tak to trochę z tym roboty będzie.
R.....0
R.....0
@chiken: Pewnie to by się dało za pomocą wątków. W momencie cina drugi wątek ma sleepa a po slepie anuluje cina.
chiken
chiken Autor
0
@Trytka: to pochwal się rozwiązaniem ( ͡° ͜ʖ ͡°)
WhirPool
WhirPool
@chiken: spróbuj kod z 1 odpowiedzi, ale nie wiem czy to zadziała: link
Trytka
Trytka
@chiken: Jak przeczytasz, przyda ci sie na przyszlosc.

http://searchengineland.com/guide/how-to-use-google-to-search

Za godzine podlinkuje co znalazlem.
lionbest
@AferaZaAfera: Zakładam się że jednak nie pisze pod Linuxem I tu jego szczęście znikło. A nawet jak go przekonasz do Linuxa to nie przekonasz jego nauczyciela czy tam innego wykładowcę. Wiadomo że wątki to overkill ale pod Wingrozą API jest tak z-----e że nawet boost ASIO odpuściło poprawną implementację.

Szczególnie że std::thread jest już od paru lat, a nic z ASIO na razie niema.
A.....a
A.....a
@lionbest: akurat porównanie, że wątki już są, a ASIO nie ma trochę bez sensu, bo kiedy wątki dodawali chyba nawet nie było zgłoszonego *modułu* Networking TS (nad którym już trwają już od dawna prace i bodajże ma być dostępny jako TS w C++17). Także to wina po prostu tego, że jednocześnie nie potrafią zbyt wiele dodać i ciągnie się to latami...

No ale zgodzę się, pod linuxem jakoś tak dużo
lionbest
@AferaZaAfera: Może i by było ale std::future jest totalnym niedorozwojem. Przykładowo da się zrobić takiego selecta na dwóch std::future.
A.....a
A.....a
@lionbest: Chodziło mi bardziej o to czego brakuje w future, aniżeli co trzeba do zaimplementowania tego.
lionbest
@AferaZaAfera: Która nie działa:
http://cpp.sh/3yjem
@chiken: Masz wyżej przykładowy kod a raczej dwa.
A.....a
A.....a
Która nie działa:


@lionbest: bo?
lionbest
@AferaZaAfera: Dobra nie przeczytałem twojej odpowiedzi.
Oczywiście działa ale należało by to użyć po bożemu jako singleton trzymający wczytaną linię czy tam inny buffor.