14. oktober 2002 - 13:56Der 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 ?
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
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
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.
Synes godt om
Ny brugerNybegynder
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.