w jaki sposób sprawdzić, czy deadline_timer jest aktywny? na przykład jeśli jest w stanie async_wait i nie został anulowany?jak sprawdzić, czy boost :: deadline_timer jest aktywny
Odpowiedz
Program obsługi limitu czasu zostanie wywołany z warunkiem błędu, jeśli timer został anulowany (jak również z normalnym czasem oczekiwania). Czy nie można po prostu ustawić wartości logicznej przed wywołaniem async_wait
, a następnie zresetować ją w module obsługi, jeśli ustawiony jest warunek błędu?
trzy opcje przychodzą na myśl:
Stwórz własną klasę timera (przy użyciu deadline_timer oczywiście), który ma swój własny element do_async_wait. W tym elemencie ustawiasz zmienną składową, która może następnie zostać zwrócona z elementu bool isWaiting() lub podobnego, zanim wywołasz async_wait w wewnętrznym deadline_timer. Zauważ, że nie uważam, że członek async_wait jest wirtualny, więc nie możesz po prostu dziedziczyć z deadline_timer i przesłonić. Zauważ, że powinieneś również zresetować flagę, gdy wywoływany jest twój handler (wykonując własny timer, który przekazuje dalej do dowolnego innego handler'a) lub gdy wywoływany jest call.
Edytuj kod doładowania, aby zrobić to, co chcesz. Jest to całkowicie zgodne z prawem, o ile mi wiadomo, jednak nie jest to oczywiście bardzo dobra opcja.
Zmień swoje wymagania/projekt, abyś nie musiał o tym wiedzieć.
Co powiesz na to?
boost::asio::deadline_timer mTimer;
const bool timerExpired = (mTimer.expires_at()
<= boost::posix_time::second_clock::local_time());
to nie będzie działać, ponieważ zegar nie jest gwarantowana wygasa dokładnie na czas. –
Jak to się różni od innych zegarów? –
Nie różni się od innych zegarów. Ale jeśli użyjesz tego kodu do wykrycia, czy timer jest aktywny, istnieje warunek wyścigowy, w którym to będzie zwracane przez małą przerwę przed upływem czasu. Jeśli używasz tego, na przykład, aby sprawdzić, czy można bezpiecznie zwolnić pamięć, program ulegnie awarii. –
wiem, że to jest trochę stary w tym momencie, ale mam inny możliwy sugestia: jak o uzyskanie wdrożenie, a następnie żądania, jeśli nie są możliwe do czasu czeka. to będzie wyglądać następująco:
mTimer.get_implementation().might_have_pending_waits
- 1. Lepsze Boost asio deadline_timer przykład
- 2. Jak mogę sprawdzić, czy Dispatcher.DisableProcessing jest aktywny?
- 3. boost :: deadline_timer może zawieść, gdy zegar systemowy jest modyfikowany
- 4. Jak sprawdzić, czy NSTimer jest aktywny czy nie?
- 5. Jak sprawdzić programowo, czy punkt aktywny jest włączony czy wyłączony?
- 6. Jak sprawdzić blok CMS jest aktywny?
- 7. Jak sprawdzić, czy aktywny zacząć od powiadomienia
- 8. Jak sprawdzić, czy widget jest aktywny w Tkinter?
- 9. MySQL - Jak sprawdzić, czy START TRANSACTION jest aktywny
- 10. Jak sprawdzić, czy ścieżka jest poprawna w systemie boost :: filesystem?
- 11. Czy Google Guice jest aktywny?
- 12. Jak sprawdzić, czy pojemnik jest stabilny?
- 13. Jak sprawdzić, czy alarm jest ustawiony?
- 14. Jak sprawdzić, czy jest konsola?
- 15. Czy można sprawdzić, czy przycisk blokady czapek jest aktywny podczas pisania w formularzu?
- 16. Boost.Test sprawdzić, czy wskaźnik jest null
- 17. Jak sprawdzić, czy Android "Mobilne dane" jest na
- 18. Programowo sprawdź, czy system Windows 7 jest aktywny.
- 19. Pasek aktywny Bootstrap Aktywny
- 20. Jak mogę sprawdzić, czy kolejka jest pusta?
- 21. Jak sprawdzić, czy DataGridViewCheckBoxCell jest sprawdzana
- 22. Jak sprawdzić, czy plik Global.asax jest wywoływany
- 23. Jak sprawdzić, czy klasa Java jest abstrakcyjna?
- 24. Jak sprawdzić, czy uchwyt pliku jest gniazdem?
- 25. Jak mogę sprawdzić, czy funkcja jest częściowa?
- 26. Jak sprawdzić, czy obiekt jest obiektem RegExp?
- 27. Jak sprawdzić, czy MySQLnd jest aktywnym sterownikiem?
- 28. Jak sprawdzić, czy podwójne jest równe NaN?
- 29. PHP: jak sprawdzić, czy klient jest lokalny?
- 30. Jak sprawdzić, czy zmienna wyliczeniowa jest ważna?
tak, po prostu sprawdzenie, czy nie zostały pominięte coś w interfejsie deadline_timer –