Chciałbym wygłaszać spekulacje w spekulacjach, mając nadzieję na (choć nieoczekiwany) wynik. Mój kod ma twardy limit czasowy. Czy istnieje prosty sposób na uruchomienie kodu rakietowego przez kilka sekund, a następnie niezawodne zabicie go i wykonanie kodu awaryjnego przed upływem terminu?Nici do biegania rakietowego przez ustalony czas
Odpowiedz
Tak, prostym sposobem na to jest korzystanie z biblioteki engine. Na przykład:
#lang racket
(require racket/engine)
(define e (engine
(λ (_)
;; just keep printing every second
(let loop()
(displayln "hi")
(sleep 1)
(loop)))))
;; run only for 2 seconds
(engine-run 2000 e)
Zamiast określania czasu, można również określić przedmiot event tak, że wątek przestanie działać, gdy zdarzenie wyzwala.
Możesz stworzyć wątek "pracowniczy" do wykonania pracy i kolejny wątek "watcher", aby zabić pracownika.
Opisano to w sekcji Dokumenty w sekcji More: Systems Programming.
Najprostszym, pierwsze cięcie może być wystarczające dla obliczenia:
(define (accept-and-handle listener)
(define-values (in out) (tcp-accept listener))
(define t (thread
(lambda()
(handle in out)
(close-input-port in)
(close-output-port out))))
; Watcher thread:
(thread (lambda()
(sleep 10)
(kill-thread t))))
Jednak jeśli masz do czynienia z innymi zasobami czytaj dalej, aby dowiedzieć się o opiekunów.
W tej metodzie, jaki jest najlepszy sposób, aby zwrócić wynik pierwszego wątku do głównego wątku? (wątek-wysyłanie) wydaje się nieco niezgrabny, wszystko, czego chcę, to coś takiego (thread-wait t), które blokuje na ti zwraca wynik. Czy istnieje prosty sposób na zrobienie tego? – So8res
Dobra uwaga. Możesz spróbować ['channel'] (http://docs.racket-lang.org/reference/channel.html) - zlecić robotowi' channel-put' normalny wynik, mieć watcher 'channel-put' wynik limitu czasu i główny wątek powoduje, że 'channel-get' czeka na to, co nastąpi wcześniej. –
- 1. Dokładność snu nici
- 2. Względny element div przechodzi przez ustalony element div podczas przewijania
- 3. Pula nici nie zmienia rozmiaru
- 4. OpenCV biegania kmeans algorytm na obrazie
- 5. Zmierz wydatki na nici
- 6. Czy optymalne jest umieszczanie nici w zawieszeniu?
- 7. asynchroniczny/Oczekujcie vs Nici
- 8. Maksymalny limit nici?
- 9. Java ustalony przełącznik vs HashMap
- 10. Testowanie stacji nocnej: Ustaw przeglądarkę na ustalony rozmiar.
- 11. Kończenie nici z wdziękiem nie używając TerminateThread()
- 12. Ustalony nagłówek typu Flexbox, zawartość przewijana do oznaczenia tabeli
- 13. Jak wyświetlać HTML do przeglądarki przyrostowo przez dłuższy czas?
- 14. Odblokowywanie tabel po utracie nici
- 15. Nici tła vs UI wątku
- 16. Nici tła w języku C#
- 17. Interesujące zachowanie Nici w Javie
- 18. C# Zatrzymywanie nici po wyjątek
- 19. Nici w pythonach i GIL
- 20. Jak pomnożyć czas przez liczbę całkowitą?
- 21. Czekaj na dane przez określony czas.
- 22. Kątowy materiał sidenav i ustalony pasek narzędzi
- 23. Przez pewien czas miga czarny ekran
- 24. Uśpij proces przez losowy czas - Erlang
- 25. Co oznacza "Poziomy przez cały czas"?
- 26. Synchronizacja urządzeń z Androidem przez czas GPS?
- 27. Jak mogę rozszerzyć MKMapRect o ustalony procent?
- 28. Delay każdej iteracji pętli przez pewien czas
- 29. Jak skrócić czas wyszukiwania clang_complete przez zwiększenie
- 30. Jak mogę pokazać toast przez określony czas?
Czyż nie jesteśmy urocze z odpowiedziami umieszczonymi jednocześnie? :) Poważnie, nawet nie wiedziałem o "rakiecie/silniku", to jest miłe. –