Avatar billede vips Nybegynder
14. oktober 2002 - 13:56 Der er 2 kommentarer og
1 løsning

Streng FIFO / buffer

Jeg er ved at lave et program der sender SMS vha. et GSM-modem på COM porten.
Problem består af følgende:
Data kommer som strenge fra input delen af programmet, men modemet kan ikke nå at sende SMS før næste streng kommer (Det tager ca. 4-5 sek at sende en SMS)
Hvordan laver jeg styring / pointere til et array / buffer som kan håndtere 25 strenge evt. flere, således at strengene bliver gemt i bufferen og derefter sendt en efter en, indtil bufferen er tom ?

mvh Viggo
Avatar billede phpgris Nybegynder
15. oktober 2002 - 15:17 #1
Hvis jeg forstår dit spørgsmål rigtigt kan du bruge disse funktioner til at lave en FIFO-buffer med:

Public MessageBuffer() As String

Public Function CreateBuffer()
    ReDim MessageBuffer(1)
End Function

Public Function PutBuffer(sMessage As String)
    Dim nIndex As Integer
   
    If Not sMessage = Empty Then
        nIndex = UBound(MessageBuffer) + 1
        ReDim Preserve MessageBuffer(nIndex)
        MessageBuffer(nIndex) = sMessage
    End If
End Function

Public Function GetBuffer() As String
    Dim nIndex As Integer
   
    If UBound(MessageBuffer) >= 2 Then
        GetBuffer = PeekBuffer()
        For nIndex = 2 To UBound(MessageBuffer) - 1
            MessageBuffer(nIndex) = MessageBuffer(nIndex + 1)
        Next nIndex
        ReDim Preserve MessageBuffer(UBound(MessageBuffer) - 1)
    End If
End Function

Public Function PeekBuffer() As String
    If UBound(MessageBuffer) >= 2 Then
        PeekBuffer = MessageBuffer(2)
    End If
End Function

Du kan så derefter f.eks. sætte et loop op der sender beskederne en efter en (her med SendBesked):

Do While Len(PeekBuffer())
    SendBesked GetBuffer()
Loop
Avatar billede vips Nybegynder
21. oktober 2002 - 23:05 #2
Tak for hjælpen
Jeg har testet koden og det ser ud til at virke efter hensigten.
Funktionen PeekBuffer kan jeg ikke helt se hvad den skal bruges til ?
Det ser ud til at arrayét altid begynder fra position 2, men det er OK
Avatar billede phpgris Nybegynder
22. oktober 2002 - 00:31 #3
Det var så lidt.

PeekBuffer() kigger i bufferen uden at fjerne et element fra den. Det er nyttigt hvis man lige skal tjekke om der overhovedet er noget i bufferen eller hvis man skal afgøre om næste element skal behandles med det samme eller om det skal efterlades til senere.

Element 2 er det første element i arrayet da Visual Basic ved redimensionering ikke vil lade en danne et tomt array - dvs. "ReDim MyArray(0)" giver fejl. Derfor må man i stedet bruge "ReDim MyArray(1)" til at danne det tomme array og følgeligt bliver element 2 det første element i arrayet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester