Událost závislá na absolutním čase   zodpovězená otázka

.NET

Dobrý den,

chtěl bych se jenom pro formu pozeptat, jestli ve VB neexistuje nějaká metoda, která by mi vyvolala událost v přesně nastaveném čase.

Nebo je nutno postupovat klasicky, tj. zjistit si aktuální čas, ten odečíst od požadovaného času a takto vzniklou časovou diferenci zadat do normálního timeru a nechat jej odpočítávat až do požadované doby (a doufat, že časová odchylka vzniklá třeba vytížením systému či nepřesností timeru nebude příliš velká).

(pro svůj účel bych se potřeboval dopídit k přesnosti alespoň kolem 5-ti sekund při zadání požadavku cca 1 hodinu před požadovaným časem události).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já bych to řešil tak, že bych Timer nechal každou vteřinu porovnávat hodiny, minuty a vteřiny aktuálního datumu s hodinami, minutami a vteřinami požadovaného času (pokud nezáleží na dni, měsíci a roce).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dík za námět - asi nějakou podobnou cestou budu nakonec muset jít (původně jsem uvažoval, že si timer nastavím na o něco kratší interval, než bych potřeboval (to "o něco kratší" bych musel vyzkoušet empiricky tak, aby vždy bylo zaručeno, že k události dojde dříve než mám v úmyslu), no a pak bych se mohl dostat již natolik blízko k cílovému času, že následné nastavení intervalu by vedlo k dostatečně (z mého pohledu) přesnému výsledku).

Je jasné, že Váš návrh je jednodušší na programování a logicky "čistší", na druhou stranu bude o něco více mrhat systémovými prostředky - ale asi máte ve své úvaze pravdu s tím, že ta nadměrná zátěž bude celkem zanedbatelná.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

"mrhat systémovými prostředky" - smím se zeptat čím?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Určitě smíte - tím, že každou sekundu mi musí proběhnout ta porovnávací procedura a to si určitě nějaký čas procesoru vyžádá - ale ještě jednou opakuji, dle Vašich příspěvků do diskusí na tomto serveru je mi jasné, že máte s programováním hromadu praktických zkušeností a že si tedy asi velice dobře uvědomujete, jak "významná" z pohledu celku taková zátěž bude. A proto Vás co by profíka v oboru okamžitě napadne tato nejjednodušší cesta, kdežto já - totální laik - si takovéto věci okamžitě neuvědomím - pod dojmem prvního pohledu na problém si řeknu, že bych podobnou metodou zbytečně zatěžoval každou sekundu procesor a proto dále již tuto cestu nedomýšlím. A tak mi klidně může uniknout i fakt, že složitostí svého algoritmu bych možná ve výsledku ten procesor zatížil nakonec ještě více.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Můžete být naprosto klidný, protože zatížení procesoru takovým způsobem je naprosto zanedbatelné.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Opravte mne prosím, jestli se pletu, ale existuje systémová proměnná, která vrátí aktuální čas ve formátu DD.MM.RRRR HH:MM:SS. Pokud bych tedy tuto hodnotu každou 0,5 vteřinu porovnával se zadanou hodnotou ve stejném formátu(převedeno na textový řetězec), tak se musím trefit s přesností jedné vteřiny na zadanou hodnotu. Je to moc uhozený ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Čas většinou nebývá interně reprezentován jako nějaký text, ale jako počet milisekund (nebo něčeho jiného) od nějakého pevného data. Tato číselná hodnota se na text daného formátu převádí až ve chvílích, kdy je to potřeba. Porovnat dvě čísla je rychlejší než porovnat dva stringy.

Samozřejmě i vámi navrhované řešení by bylo možné, ale je to zbytečné a navíc ta funkce vrací text ve formátu, jaký máte nastaven we Windows spolu s místním nastavením. Takže pozor na to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback