Co się naprawdę stało, gdy system Windows powiedział „X przestał działać”?

1

Miałem usługę tworzenia kopii zapasowych online (której nie mogę polecić), kupiłem dysk Seagate i zamiast tego pobrałem Seagate Dashboard, aby wykonać zadanie. Po dwóch dniach tworzenia pierwszej kopii zapasowej i wciąż nad nią pracuję, pojawia się typowy komunikat systemu Windows, który mówi coś w stylu „Dashboard przestał działać” i daje mi opcje zamknięcia programu lub szukania (kogoś?) rozwiązanie, a następnie zamknij program. Głosowałem za jego zamknięciem, ponieważ nie ufam Windowsowi, że przeszukałby dla mnie takie rzeczy.

Chodzi o to, że program Dashboard nie został zatrzymany. Kontynuuje zwiększanie prędkości procesora i połączenia bezprzewodowego, i tak dalej, jak miało to miejsce w ciągu ostatnich dwóch dni, i nadal zwiększa liczbę „procent ukończenia” w tym samym tempie lodowcowym (nie narzekam, wiem, że to wymaga długi czas - po prostu mówiąc, że to nie zmieniło jego zachowania).

Ale najwyraźniej wiadomość nie oznaczała tego, co myślałem, że oznaczało - że wykryło, że proces ten jakoś się zakończył. Co to znaczy? Z zawodu jestem programistą, więc mogę znieść rozsądne wyjaśnienia techniczne ...

rcook
źródło
1
Ponieważ jesteś programistą, być może jest to najlepsza odpowiedź dla Ciebie: support.microsoft.com/kb/304991 i msdn.microsoft.com/en-us/library/... w skrócie, wydaje się, że zależy to od tego, czy proces .MainWindowHandle odpowiada na WaitForInputIdle w rozsądnym czasie. jeśli interfejs użytkownika znajduje się w wątku zakleszczonym lub w nieskończonej pętli, nie osiągnie wejściowego stanu bezczynności.
Frank Thomas
1
więc źle napisany program, który używa pojedynczego wątku dla interfejsu użytkownika i pracy, który nie przerywa okresowo pracy w celu zareagowania na zdarzenia interfejsu użytkownika, takie jak Draw (), wydaje się nie odpowiadać. Zasadniczo za każdym razem, gdy wątek interfejsu użytkownika nie otrzyma czasu wykonania dla dowolnego okresu, system Windows zgłosi go jako nie odpowiadający.
Frank Thomas
Doskonała odpowiedź; Jeśli skopiujesz te rzeczy do odpowiedzi, zaakceptuję je jako jedno. To wyjaśnia, dlaczego Win7 może zgłosić to jako „zatrzymane”, nawet jeśli tak naprawdę nie jest, i mogę zaświadczyć, jak słabo reaguje jego interfejs użytkownika. Seagate ma usługę, sądzę, że trzeba tam wykonać jej kopię zapasową i NIE mam pojęcia, jaką „pracę” mogłaby wykonywać podczas oczekiwania na dane wejściowe interfejsu użytkownika. To nowa tajemnica, choć nie spodziewam się, że ktokolwiek poza autorem (autorami) tego programu będzie wiedział. Dzięki.
rcook
1
@rcook: Myślę, że masz na myśli „przestał odpowiadać” - „przestał działać” oznacza, że ​​program się zawiesił.
jdigital
Zatrzymana praca, jako okno dialogowe systemu Windows, jest rozszerzeniem niedziałającego zachowania i wskazuje, że jeden z wątków lub procesów potomnych napotkał nieobsługiwany wyjątek podczas wykonywania operacji asynchronicznej, tak że formularz interfejsu użytkownika nie wie, że nigdy nie otrzyma oddzwonienia i stale obraca się, czekając na zakończenie operacji asynchronicznej. W takim przypadku system Windows musi być arbitrem i wyświetlać komunikat, ponieważ wątek interfejsu użytkownika nie może. Są przypadki, w których program wystrzeliwuje i przestaje odpowiadać, ale nie spowoduje to zatrzymania działającego okna dialogowego.
Frank Thomas

Odpowiedzi:

1

Windows Vista i nowsze wersje domyślnie implementują sprawdzanie responsywności aplikacji opartych na interfejsie użytkownika .

Może to oznaczać, że aplikacja jest oznaczona jako „Nie odpowiada”, gdy znajduje się na pierwszym planie (pasek zadań) lub gdy jej okno jest aktywne (okno dialogowe).

Gdy aplikacja nie odpowiada, a system operacyjny może wywnioskować, że awaria jest związana z wyjątkiem w module potomnym, którego sama aplikacja nie jest świadoma, system Windows wie, że aplikacja nie może wyświetlić własnego komunikatu o błędzie, zapisać w dzienniku zdarzeń systemu, i utwórz raport o awarii, system Windows wyświetli okno dialogowe wskazujące, że proces „przestał działać”. Różni się to nieco od awarii aplikacji, ponieważ stos głównego pliku wykonywalnego sam się nie zawiesił; jednak generalnie czeka na odpowiedź modułu potomnego, która nigdy nie nadejdzie. Dziennik zdarzeń często zawiera informacje o wyjątku dziecka.

Aplikacja jest uważana za niereagującą, gdy interfejs API systemu Windows nie może wykryć, że okno interfejsu użytkownika weszło w miejsce, w którym użytkownik może nim manipulować w pewnym momencie. W języku C # możesz sprawdzić status systemu Windows, aby sprawdzić jego reakcję na połączenie Process.Responding(). Ta metoda zwraca false (lub zgłosi wyjątek, jeśli MainWindowHandle nie istnieje) lub true, jeśli okno jest w stanie bezczynności i oczekuje na dane wejściowe.

Są przypadki, w których program nieodpowiadający wykonuje wiele pracy, dokładnie tak, jak powinien, więc brak odpowiedzi nie zawsze wskazuje na awarię (po prostu zły kod). Okno pulpitu może ostatecznie stać się responsywne. „Przestał działać” dialogowe jednak zazwyczaj nie wskazują na trwałą niewydolność, a aplikacja będzie musiała zostać przerwana. Nie jest to w 100% prawdziwe przez cały czas, ale najczęściej tak jest.

Charakter tych komunikatów i związane z nimi problemy są nierozerwalnie związane z technikami programowania stosowanymi do wykonywania pracy oraz integracji z zewnętrznymi komponentami i usługami, takimi jak zewnętrzne interfejsy API. Microsoft opublikował kilka dobrych informacji o tym, co robić, a czego nie robić, aby opracować responsywny projekt interfejsu użytkownika . Słabe strategie wątkowania, synchroniczny i asynchroniczny dostęp do komponentów zewnętrznych oraz rywalizacja o zasoby (blokady / zakleszczenia) są częstymi przyczynami.

Dla użytkowników końcowych cierpiących na problemy z aplikacjami, które „przestały działać” Microsoft zaleca obszerną ścieżkę rozwiązywania problemów, którą można znaleźć tutaj: http://support.microsoft.com/kb/2694911 Sterownik karty graficznej jest często odpowiedzialny za problemy z Draw () pętli, a zatem może powodować brak reakcji, podobnie jak systemowe interfejsy API. sprawdzenie instalacji sterownika i sprawdzenie, czy sam system operacyjny jest zintegrowany (z SFC.exe), są warte podjęcia kroków w celu ustalenia, czy aplikacja ściśle integruje się z systemem, zgodnie z oczekiwaniami. Sprzęt, taki jak karta graficzna i pamięć RAM, również musi działać poprawnie.

Mam nadzieję że to pomogło

Frank Thomas
źródło
To pomaga. Będę musiał wrócić i przeanalizować różnicę między tą odpowiedzią a typowym artykułem (artykułami) na ten sam temat; przy pierwszym czytaniu wydają się mieć taką samą gęstość wiedzy technicznej, ale twoja jest znacznie bardziej czytelna i pouczająca, a ich po prostu zostawiają mnie, jakbym dostał dane, a nie informacje. Dzięki jeszcze raz.
rcook