Niezawodne Timer w aplikacji konsoli

głosy
78

Zdaję sobie sprawę, że w .NET istnieją trzy typy Timer (zobacz Porównywanie klas programatora w Bibliotece Framework Class ). I wybrany gwintowany stoper jak inne rodzaje może odchylać jeśli główny gwint jest zajęty, i żeby to niezawodny.

Sposób ten zegar działa w kontroli czasomierza jest umieścić w innym wątku, więc zawsze może zaznaczyć wraz z rozpoczęciem prac zakończono wątku macierzystego, kiedy nie jest zajęty.

Problem z tym zegarem w aplikacji konsoli jest to, że podczas gdy zegar tyka wzdłuż na inny wątek główny wątek nie robi nic, więc aplikacja zamyka.

Próbowałem dodanie while truepętli, ale wtedy główny wątek jest zbyt zajęty, kiedy zegar gaśnie.

Utwórz 01/08/2008 o 13:43
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
17

Rozważyć użycie ManualResetEvent zablokować główny wątek na końcu jego przetwarzania i wywołać Reset()na nim raz przetwarzanie timera zostało zakończone. Jeśli jest to coś, co musi działać ciągle, rozważyć przeniesienie tego do procesu obsługi zamiast app konsoli.

Odpowiedział 01/08/2008 o 13:55
źródło użytkownik

głosy
50

Można użyć coś jak Console.ReadLine()zablokować główny wątek, więc inne wątki tła (jak nici czasomierza) będzie nadal działać. Można również użyć AutoResetEvent zablokować wykonanie, a następnie (jeśli trzeba) metody set () można wywołać na tym obiekcie AutoResetEvent aby zwolnić główny wątek. Należy również upewnić się, że odwołanie do obiektu Timer nie wykracza poza zakres i śmieci zebrane.

Odpowiedział 01/08/2008 o 13:56
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more