Jak byś określił, że pętla jest nieskończoną pętlą i wyrwie się z niej.
Czy ktoś ma algorytm lub może mi pomóc w tej sprawie.
Dzięki
Odpowiedzi:
7 dla odpowiedzi № 1Nie ma ogólnego algorytmu przypadku, który mógłby określić, czy program znajduje się w nieskończonej pętli, czy nie dla każdego ukończenie język, to jest w zasadzie Problem zatrzymania.
Pomysł udowodnienia tego jest prosty:
- Załóżmy, że masz taki algorytm
A
. - Zbuduj program
B
który się powołujeA
na siebie [naB
]. - gdyby
A
odpowiada „program się zatrzyma” - wykonaj nieskończoną pętlę - inaczej [
A
odpowiedziB
nie zatrzymuje się - natychmiast zatrzymaj
Załóżmy teraz, że przywołujesz A
na B
- odpowiedź będzie zdecydowanie błędna A
nie istnieje.
Uwaga: powyższe NIE jest formalnym dowodem, tylko jego szkicem.
4 dla odpowiedzi nr 2
Jak napisali inni, nie można tego ustalić.
Jeśli jednak chcesz mieć jakieś sprawdzenie, tymoże użyć wzoru projektu WatchDog. Jest to osobny wątek, który sprawdza, czy zadanie jest nadal aktywne. Twój własny wątek powinien dawać sygnał regularnie, aby powiedzieć, że żyje. Upewnij się, że ten sygnał nie jest ustawiony w twojej (nieskończonej) pętli.
Jeśli nie było sygnału, program znajduje się w nieskończonej pętli lub został zatrzymany i watchdog może na niego działać.