Spolehlivý časovač v aplikace konzoly

hlasů
78

Jsem si vědom toho, že v .NET existují tři druhy časovačů (viz Srovnání třídy Timer v knihovně .NET Framework Class ). Jsem zvolil závitový časovač jako ostatní typy může drift v případě, že hlavní vlákno je obsazeno, a potřebuji to, aby byla spolehlivá.

Způsob, jakým tento časovač pracuje při kontrole časovače je kladen na jiném vlákně, takže může vždy zaškrtnout spolu s zahájeny práce dokončeny na mateřské niti, když to není obsazeno.

Problém s tímto časovačem v konzolové aplikace je, že zatímco časovač běží s sebou na jiném vlákně hlavní vlákno není nic dělat, takže aplikace zavře.

Zkoušel jsem přidání while truesmyčku, ale pak hlavní nit je příliš zaneprázdněn, když se časovač zhasne.

Položena 01/08/2008 v 13:43
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
50

Můžete použít něco jako Console.ReadLine()zablokovat hlavní vlákno, aby ostatní vlákna na pozadí (jako časovače závity) bude i nadále pracovat. Můžete také použít AutoResetEvent zablokovat spuštění, pak (pokud je potřeba), můžete volat metodu Set () na tento objekt AutoResetEvent uvolnit hlavní vlákno. Také zjistili, že váš odkaz na objekt Timer nezhasne rozsahu a odpadky shromažďují.

Odpovězeno 01/08/2008 v 13:56
zdroj uživatelem

hlasů
17

Zvážit použití ManualResetEvent zablokovat hlavní závit na konci jeho zpracování, a volat Reset()na něj jednou zpracování časovače skončila. Pokud je to něco, co musí běžet nepřetržitě, uvažují o přesunu do tohoto procesu služby namísto aplikace konzoly.

Odpovězeno 01/08/2008 v 13:55
zdroj uživatelem

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