[ KaAmIkAzA @ 09.07.2008. 13:28 ] @
Pozdrav

Imam funkciju napisanu, i problem mi je u tome kako da odradima kada je program aktivan da svaki sat vremena sam odradi odredjenu funkciju.
[ Shadowed @ 09.07.2008. 13:53 ] @
Stavis timer i jednu promenljivu u koju smestis trenutno vreme, timer stavis na 1000ms i proveravas da li je trenutno vreme vece od onog u promenljivoj + 1h, ako nije ne radis nista, ako jeste pozoves funkciju i u promenljivu stavis trenutno vreme.
Stvar se malo komplikuje ako ti je potrebna velika preciznost i/ili ako ti izvrsavanje funkcije traje neko poduze vreme.
[ KaAmIkAzA @ 09.07.2008. 14:04 ] @
@Shadowed hvala na odgovoru probacu sada to.
[ stefanpn @ 09.07.2008. 15:33 ] @
Citat:
Shadowed: Stvar se malo komplikuje ako ti je potrebna velika preciznost i/ili ako ti izvrsavanje funkcije traje neko poduze vreme.


VB zbog svoje "brzine" nije pogodan za upravljanje REAL-TIME sistemima, a i u tom slucaju moze da stavi da se funkcija izvrsava u zasebnom thread-u...

Mozes i sledece:

Code:

Public Tmr as Integer

Private Sub Form_Load()
    
    Timer1.Interval = 1000
    
End Sub

Private Sub Timer1_Timer()
    
    Tmr = Tmr + 1
    If Tmr = 60 Then
        Tmr = 0
        MojaFunkcija Arg1, Arg2, ..., ArgN
    End If
    
End Sub


Samo dodaj jednu Timer kontrolu.
[ Shadowed @ 09.07.2008. 15:58 ] @
Hm, nisam siguran sta si hteo reci :)
To za nepogodnost je ono sto sam i ja rekao za slucaj da je nesto zahtevnije u pitanju, a kod koji si dao radi manje vise kao sto sam i ja rekao, samo sto je neprecizniji i sto ne meri jedan sat nego jedan minut.
[ stefanpn @ 09.07.2008. 16:11 ] @
Hteo sam reci da ako pise zahtevnu funkciju koja mora da se izvrsava u ms tacno u odredjeno vreme verovatno je ne pise VB-u.

Znam da je 60 sekundi = 1 minut a opet 60 minuta jedan sat, nego sam samo hteo da mu pokazem kako bi to trebalo da izgleda a valjda bi i sam shvatio da nije 60 nego 3600 sekundi...

Napisao sam ovo jer je po onome kako si ti objasnio trebalo da svake sekunde proveri da li se vrednost DateTime.Hour(Now) promenila u odnosu na referentnu promenljivu. Po meni je ipak malo lepse da sam broji sekunde i broji vreme od pokretanja programa a ne po sistemskom satu.
[ Aleksandar Ružičić @ 09.07.2008. 17:04 ] @
ako je potrebno merenje vremena tacno u milisekund onda moze da koristi sistemski tajmer (dobro, treba malo subclassinga, ali nije to prob)...
[ Eurora3D Team @ 10.07.2008. 00:12 ] @
Ovo sto je Stefan napisao je sasvim Ok resenje za ovo u VB -u. Cim covek hoce da namesti interval na jedan sat verovatno mu preciznost u ms nije toliko bitna.
Stefane, paradoksalno zvuci al za ovo je preciznije da se Timer stavi na minut (60000) pa da se broji do 60, zato sto mala kasnjenja pravi VB funkcija (a ne windows) kad inkrementira brojac. Kad su intervali redji smanjuje se i ta greska ...
[ Shadowed @ 10.07.2008. 01:32 ] @
Sa nacinom koji sam opisao, maksimalna greska je jednaka intervalu koji se postavio timer-u. Moze da stavi i 10ms i da dobije prilicno precizno (pod uslozovm da Now vraca preciznije od sekunde, ne secam se kako je u 6ici, ali bi trebalo...).
[ Eurora3D Team @ 10.07.2008. 02:16 ] @
Znam sta si mislio ... nesto kao ovaj kod dole. Ovo je valjda najpreciznije moguce , mada bi ipak bilo bolje da se Timer stavi na veci interval jer nema potrebe da se trosi toliko procesorsko vreme
Code:

Private Declare Function GetTickCount Lib "kernel32" () As Long
Dim StartTme As Long, TimeDelta As Long

Private Sub Form_Load()
StartTme = GetTickCount ' GetTickCount je brojac sistemskog sata , ms od kad je windows ukljucen
TimeDelta = 3600000  ' za koliko da okine sledeci event
Timer1.Interval = 1: Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
If StartTme + TimeDelta <= GetTickCount Then StartTme = GetTickCount: Debug.Print "Event"
' Umesto Debug.Print "Event" pozovi svoju funkciju
End Sub
[ KaAmIkAzA @ 10.07.2008. 08:46 ] @
Evo ovako uradio sam kod kao sto je @Eurora3D Team postavio i za sada mi radi OK, bez ikakvih problema vidjet cu dalje sta ce se desavati.

Pozdrav i hvala svima