[ Aleksandrov @ 25.02.2009. 10:00 ] @
Pisem program u VSc#2008
Zelim da se u tacno odredjeno vreme (01:00) desi neki dogadjaj. Trenutno znam za dva nacina kako to da uradim
Prvi je da u tredu stavim da se stalno uporedjuju trenutno vreme i zeljeno vreme pa da tada pokrenem zeljeni event tj.

Code:

        static void Sacekaj_Event()
        {
            Thread.Sleep(50);
            if (trenutno_vreme>zeljeno_vreme) UradiAkciju();
        }


Ovo mi se ne dopada zato sto mi deluje da ce ova provera vremena da jede slobodne resurse kao ludo. Jesam li upravu?

Druga varijanta je da napravim tajmer i da mu postavim

Code:

timer.interval = zeljeno_vreme - trenutno_vreme

Sto isto ima odredjenih mana.

Postoji li jos neko resenje ili da iskoristim neko od ovih resenja?
[ Igor Gajic @ 25.02.2009. 11:38 ] @
Problem sa prvim pristupom - stalno ce pozivati akciju kada prodje zadato vreme plus Sleep je lose resenje u svakom slucaju

Drugi pristup mi se cini boljim mada moze da se desi da bude prilicno neprecizan.

Treci pristup je da postavis interval na timeru na nekih 1000ms pa proveravas da li je

trenutno_vreme>zadato_vreme pa ugasis timer ili postavis neki flag i izvrsis dogadjaj.
[ Sapphire @ 01.03.2009. 01:39 ] @
Timer je za ovu namjenu daleko najbolji. Iskoristi System.Windows.Forms Timer klasu, jer nije thread timer (znaci, ceka "slobodan" trenutak u main/GUI thread-u). Za interval stavi 1000ms.

Isto si pitao si da li ce poseban thread sa Sleep(50) jesti resurse kao lud? Sto ne napravis program sa jedinim takvim thread-om, pa pogledas u task manageru? Zauzece procesora nece biti preko 1% za tu aplikaciju (opet zavisi od procesora naravno). Cak ako stavis i Sleep(1), nista se bitno nece promijeniti. Mikrosekunde su jako veliki intervali za procesor, te doslovno oduzimaju tek hiljaditi dio procesorske snage.
Naravno, ne vjerujem da si stavio Thread.Sleep() u glavni GUI thread (znaci da nisi kreirao poseban). Ovo ne bi imalo nikakvog smisla, i napravio bi jako velik problem sa osvjezavanjem ekrana programa (njegovih prozora).