Italian Gestire un evento di un servizio [SOLVED]

Star-Dust

Expert
Licensed User
Longtime User
vediamo di capire se il service e il Timer dell'Activity lavorano in contemporanea.

Service
B4X:
Sub AStream_NewData (Buffer() As Byte)
    Dim Valore As String
       
    Dim newDataStart As Int = sb.Length
    sb.Append(BytesToString(Buffer, 0, Buffer.Length, charset))
    Dim s As String = sb.ToString
    Dim start As Int = 0
    For i = newDataStart To s.Length - 1

        Dim c As Char = s.CharAt(i)
        If i = 0 And c = Chr(10) Then '\n...And
            start = 1 'might be a broken end of line character
            Continue
        End If
        If c = Chr(10) Then '\n
            'CallSub2(Training,"ValoreGSR",s.SubString2(start, i))
            'GSR=s.SubString2(start, i)
            start = i + 1
        Else If c = Chr(13) Then '\r
            '            CallSub2(Training,"GSROk",s.SubString2(start, i))
            If start =0 And i=7 Then
                Valore=s.SubString2(start, i)
                File.WriteString(File.DirInternalCache,"lettura.txt",Valore)
                Log("Conduttanza " & Valore & " - Time: " & DateTime.GetMinute(DateTime.Now) & ":" & DateTime.GetSecond(DateTime.Now))
            End If
            If i < s.Length - 1 And s.CharAt(i + 1) = Chr(10) Then '\r\n
                i = i + 1
            End If
            start = i + 1
        End If
    Next

    If start > 0 Then sb.Remove(0, start)
   
End Sub


Activity
B4X:
Sub Tim_Tick
    Log("Lettura: " & File.ReadString(File.DirInternalCache,"lettura.txt") & " - Time: " & DateTime.GetMinute(DateTime.Now) & ":" & DateTime.GetSecond(DateTime.Now))
    Select Secondi
        Case 5
            Secondi = 7
            Tim.Interval=Secondi * DateTime.TicksPerSecond
        Case 7
            Secondi = 10
            Tim.Interval=Secondi * DateTime.TicksPerSecond
        Case 10
            Secondi = 12
            Tim.Interval=Secondi * DateTime.TicksPerSecond
        Case 12
            Secondi = 15
            Tim.Interval=Secondi * DateTime.TicksPerSecond
        Case 15
            Tim.Enabled=False
    End Select
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
è lento perché fa il salvataggio su file. Ma é momentaneo per capire l'errore. Poi potrai rimetterlo su GSR il valore
 

Angelo Messina

Active Member
Licensed User
Longtime User
Conduttanza 0.75174 - Time: 21:17
Conduttanza 0.75103 - Time: 21:17
Conduttanza 0.75174 - Time: 21:17
Conduttanza 0.75174 - Time: 21:17
Conduttanza 0.75103 - Time: 21:17
Conduttanza 0.75174 - Time: 21:17
Conduttanza 0.75174 - Time: 21:17
Conduttanza 0.75031 - Time: 21:18
Conduttanza 0.75031 - Time: 21:18
Conduttanza 0.75031 - Time: 21:18
Conduttanza 0.74960 - Time: 21:18
** Activity (studenti) Pause, UserClosed = true **
Conduttanza 0.74960 - Time: 21:18
Conduttanza 0.74888 - Time: 21:18
** Activity (training) Create, isFirst = true **
File in Uso Test490.csv
** Activity (training) Resume **
Lettura 5 0.74888
Turno 1 Contatore 1
Lettura 7 0.74888
Quanti cicli = 5
Contatore 1
Lettura 10 0.74888
Conduttanza 0.87571 - Time: 21:21
Conduttanza 0.86628 - Time: 21:21
Conduttanza 0.74888 - Time: 21:21
 

Star-Dust

Expert
Licensed User
Longtime User
Non c'è l'orario delle letture come ho inserito nel mio esempio.

Buon lavoro alla prossima
 

Star-Dust

Expert
Licensed User
Longtime User
Ecco quello che si vede dai log:

Inizia il service per la lettura

Conduttanza 0.75031 - Time: 21:18
Conduttanza 0.74960 - Time: 21:18
** Activity (studenti) Pause, UserClosed = true **
Conduttanza 0.74960 - Time: 21:18
Conduttanza 0.74888 - Time: 21:18 Ultima lettura
Avvia l'Activity training e si ferma il service
** Activity (training) Create, isFirst = true **
** Activity (training) Resume **
Lettura 5 0.74888
Turno 1 Contatore 1
Lettura 7 0.74888
Lettura 10 0.74888
Conduttanza 0.87571 - Time: 21:21 Riprende la lettura dopo 3 secondi di pausa
Conduttanza 0.74888 - Time: 21:21

Si vede che per qualche motivo a un certo punto si interrompe e non esegue la lettura, quando avvi l'activity che visualizza i risultati.
Vienei visualizzato l'ultimo risultato letto a 5,7,10 secondi ma sempre quello perché non effettua altre letture.
Appena finisce la visualizzazione riprende il service a leggere

Quindi il problema é che il service non legge in contemporanea dell'activity ma si ferma e quindi la il valore che visualizza è sempre lo stesso.

Perché a questo punto non delegare la visualizzazione dei 5,7,10,12,15 secondi al service?
 
Last edited:
Top