Italian Ormai sono cotto DoUntil /Loop e company

antonio.murtino

Member
Licensed User
Longtime User
Si, certo, nel mio caso sto pilotando delle periferiche remote, schede tipo Arduino (simili), un po più specializzate con autenticazione, il tipo di iterazione che mi ero preposto serviva per mettere a reset tutte le periferiche in campo. Facendo dei test sul flusso, mi sono reso conto che in B4A, alcuni processi sono prioritari e che non è possibile mutare questa priorità, probabilmente perché di fatto non è un linguaggio che produce direttamente la compilazione in LM; in sostanza è un parser che sviluppa un file java che a sua volta andrà compilato in LM, tale cosa è a scapito della flessibilità del codice, va bene uguale, ma quando si sviluppa occorre tenerne conto; che tutto non può fare.
In ogni caso ho trovato la soluzione al mio problema, l'ho applicata e va benissimo, ho dovuto aggiungere birra e patatine e bicarbonato per fare in modo che possa essere digeribile.
 

antonio.murtino

Member
Licensed User
Longtime User
praticamente tu chiami la routine Start per attendere la risposta dal comando dreq.InitializeGet e l'errore più grave è qui, poichè l'http response lavora con eventi e non devi aspettare tu.

Praticamente inizializzi una variabile globale dove ti segni cosa stai facendo, ad esempio
Fase = "PrimoGet"
e poi nell'evento di ricezione dei dati, testando la variabile Fase sai cosa stai facendo,
quindi la inizializzi a Fase = "SecondoGet", esegui il secondo Get ed esci dalla routine, aspettando che l'evento venga di nuovo chiamato, e così via.

Sembra un po' difficile, ma ti assicuro che la strada è questa, io ho fatto parecchi programmi che devono gestire dati inviati/ricevuti da rete lan/internet e funzionano senza problemi

Sergio
Nella fattispecie, questa metodica è stata applicata ma con scarso successo, come ho detto in precedenza mi ricordavo di aver utilizzato il metodo che poi ho riscontrato non perfettamente funzionante, sono riuscito a trovare una mia app con un procedimento simile, ma in questo caso utilizzavo dei Sockets, applicandola in questo caso non ci sono problemi di sorta, purtroppo in questo caso le iterazioni avvengono in http ed è evidente che gli eventi ResponseSuccess o ResponseError non funzionano esattamente come i corrispondenti generati dall'oggetto socket.
 

antonio.murtino

Member
Licensed User
Longtime User
per completare il thread, quale era la soluzione?
La soluzione?, intanto dico da subito che questo "Reset" è ed era da utilizzare come "extrema ratio", solo nei casi in cui sia andata giù la rete per troppo tempo, di qualsiasi tipo essa sia. Ora in pratica ho creato una activity tutta dedicata al reset, la quale all'avvio esegue la lettura di tutte le periferiche in campo, leggendone lo stato, quindi creando dei bottoni nella cui text è indicato l'alias della periferifica, es: "luci giardino", ogni bottone presente fa riferimento ad una periferica, basta cliccare su uno dei bottoni e verrà resettata. Certo avrei preferito che il processo fosse di tipo one-touch, ma visto che non è possibile, va bene uguale.
Ho ottenuto l'effetto Winston Churchill, che quando la Manica era in forte burrasca, amava dire "L'europa è Isolata", quindi ergo sum, l'importante è crederci.
 

LucaMs

Expert
Licensed User
Longtime User
"♪♪♪ e lasciami sfogaaaare ♪♪♪"

Dovrò per forza fare una provola in b4a per testare bene sto DoEvents.
Un mio vecchissimo progetto VB.Net, con lo "stile delle finestre children", utilizza Application.DoEvents giusto in una di queste finestre, "nella quale" viene effettuato un calcolo che può impiegare parecchio tempo; bene, mentre questo calcolo viene eseguito, io posso tranquillamente utilizzare le altre finestre facenti parte la stessa applicazione.

Un semplice test da fare con b4a: un tasto che lanci un "calcolo" (un loop che incrementi il valore di una variabile, con all'interno il "famigerato") e un piccolo pannello da poter muovere col ditino mentre il calcolo prosegue.

Con VB.Net funzionerebbe e io penso anche con B4A.

Lo "sfogo" è però ben altra cosa e probabilmente aprirò un nuovo thread per questo (magari due, anche uno in inglese).
Sto sviluppando (Penelope style :p) un'app + server b4j. Soltanto adesso, dopo xxx tempo dall'ideazione e dall'inizio dello sviluppo (meglio mettere xxx per evitare fischi assordanti :D) mi sono reso conto di un problemino tecnico che non ho preso in considerazione.

Se qualcuno di voi conosce Zynga Poker, perlomeno nella versione per browser, i vari giocatori al tavolo possono svolgere piccole "attività" (tipo comprarsi da bere o offrire da bere - robaccia virtuale insapore) mentre è in corso il turno di un altro giocatore (mentre è attivo un count-down che attende che questi faccia il proprio gioco).

Bene, mentre il mio server utilizza oggetti websocket i quali agiscono nel proprio thread, è chiaro che il websocket sul client è unico; c'aggia a fà per ottenere quelle stesse possibilità di Zynga Poker (visualizzare sul client giocatori "autonomi" ma pur sempre comandati da informazioni ricevute sull'unico websocket)?

In attesa di vostri preziosissimi suggerimenti... me sdraio sur letto e cogito (sperando di non addormentarmi :p).

Scusate se sono uscito "leggermente" fuori tema: come detto, probabilmente aprirò uno o due thread al riguardo.
 
Last edited:
Top