Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Forin hidastus?

Toitsu [14.11.2006 10:04:47]

#

Eli ongelma on sarjaportissa ole tulostin, jolle pitää syöttää jokainen datarivi hitaasti.

Tämä ei tietenkään toimi, mutta miten tätä voisi hidastaa niin, että jokainen listboxin rivi luettaisiin kerran 500ms:ssä ja pukataan mscomm1:lle?

Private Sub Timer1_Timer()
For i = 0 To List1.ListCount
MSComm1.Output = List1.List(i)
Next i

vaipitääkö tämä hoitaa jotenkin "manuaalisesti"? Eli lasketaan montako riviä on listboxissa ja sitten, joka kerta kun timer toimii niin luetaan seuraava rivi? Millä tuon listboxin mitan saisi esille?


End Sub

E.K.Virtanen [14.11.2006 11:14:48]

#

Muistaakseni VB:ssä on SLEEP(millisekunnit) funktion.

[edit]
N. 5 sek. kestäneellä googlauksella löysin tämän.

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As long)

Sleep 5000

BadSource [14.11.2006 11:16:55]

#

Lisää silmukan sisälle toinen silmukka, joka tarkastaa, että edellinen data on lähetetty, ennen kuin lähettää uutta.

Sub Laheta()
    For i = 0 To List1.ListCount
        MSComm1.Output = List1.List(i)
        Do
        Loop Until MScomm1.OutBufferCount = 0
    Next i
End Sub

Jos haluat asian hoitaa tuolla Timer-objektilla, joka on esimerkissäsi (koodi-tagit!?), niin aseta sen Interval-muuttuja arvoon 500, jolloin se ajetaan 500 ms:n välein. Koodiksi seuraava...

Private Sub Timer1_Timer()
    Static i As Integer 'static-muuttuja muistaa arvonsa niin kauan, kuin ohjelma on päällä

    If i > List1.ListCount Then 'onko kaikki rivit jo lähetetty?
        Timer1.Interval = 0 'sammutetaan Timer
        i = 0 'nollataan laskuri
        Exit Sub
    End If
    MSComm1.Output = List1.List(i) 'lähetetään rivi
    i = i + 1 'kasvatetaan laskuria
End Sub

Toitsu [14.11.2006 13:50:59]

#

Ok, kiitos! Nyt toimii hienosti!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta