Italian Chiamata a sub e modifica variabili

Fulvio75

Well-Known Member
Licensed User
Ciao, mi sono posto una domanda, se per caso due sub che modificano una variabile ad esempio di testo piuttosto che numerica la dovessero modificare nello stesso preciso momento, cosa succede?
Oppure che chiamo la stessa sub mettiamo X da due sub differenti nello stesso momento, cosa succede? Va in crash l'app oppure le chiamate e le modifiche variabili si accodano?
 

Filippo

Expert
Licensed User
Longtime User
se per caso due sub che modificano una variabile ad esempio di testo piuttosto che numerica la dovessero modificare nello stesso preciso momento, cosa succede?
Anche il computer più veloce non esegue mai due operazioni perfettamente allo stesso tempo, ma c'è sempre una piccola frazione di secondo tra un'operazione e l'altra. :D
Quindi la seconda modifica dovrebbe essere sempre l'ultima.
 

Fulvio75

Well-Known Member
Licensed User
Anche il computer più veloce non esegue mai due operazioni perfettamente allo stesso tempo, ma c'è sempre una piccola frazione di secondo tra un'operazione e l'altra. :D
Quindi la seconda modifica dovrebbe essere sempre l'ultima.
Allora vado tranquillo
 

Fulvio75

Well-Known Member
Licensed User
Tranquillo mica troppo...🤣🤣🤣
In due ore per ben 3 volte le due sub hanno scritto la stessa variabile nello stesso momento e ha crashato, ho risolto mettendo un boolean di scrittura variabile quando una sub scrive la variabile in modo che la seconda sub non la scriva nello stesso momento
 

LucaMs

Expert
Licensed User
Longtime User
Tranquillo mica troppo...🤣🤣🤣
In due ore per ben 3 volte le due sub hanno scritto la stessa variabile nello stesso momento e ha crashato, ho risolto mettendo un boolean di scrittura variabile quando una sub scrive la variabile in modo che la seconda sub non la scriva nello stesso momento
Non è possibile, come ti ha già detto Filippo, che la sub venga eseguita più volte contemporaneamente; sicuramente sarà successo ma a distanza di tempo, magari pochi millisecondi.
Bisognerebbe vedere il progetto.
 

Fulvio75

Well-Known Member
Licensed User
Non è possibile, come ti ha già detto Filippo, che la sub venga eseguita più volte contemporaneamente; sicuramente sarà successo ma a distanza di tempo, magari pochi millisecondi.
Bisognerebbe vedere il progetto.
Fidati può essere le due sub dentro hanno uno Sleep quindi possono scrivere la stessa variabile nello stesso momento, è raro ma l'hanno fatto, la sfiga è immensa. Probabilmente non capiterà più oppure non così frequente ma per sicurezza ho evitato la cosa con un bel if la prima sub sta scrivendo la seconda non deve scrivere e pare funzionare
 

Alessandro71

Well-Known Member
Licensed User
Longtime User
ci deve essere un problema di logica sotto, non c'è concorrenza di esecuzione nel codice B4X
 

LucaMs

Expert
Licensed User
Longtime User
Fidati può essere le due sub dentro hanno uno Sleep quindi possono scrivere la stessa variabile nello stesso momento, è raro ma l'hanno fatto, la sfiga è immensa. Probabilmente non capiterà più oppure non così frequente ma per sicurezza ho evitato la cosa con un bel if la prima sub sta scrivendo la seconda non deve scrivere e pare funzionare
Scusa eh, (s)ragioniamo.

Il fatto stesso che tu usi una variabile booleana, cui CAMBI VALORE, e poi il tutto "funzioni", TI DIMOSTRA che siano avvenute DUE chiamate alla Sub NON contemporanee (se fosse necessaria una dimostrazione, cosa che non è, in quanto non è possibile. Forse lo sarebbe avendo due CPU!).
 

Fulvio75

Well-Known Member
Licensed User
Scusa eh, (s)ragioniamo.

Il fatto stesso che tu usi una variabile booleana, cui CAMBI VALORE, e poi il tutto "funzioni", TI DIMOSTRA che siano avvenute DUE chiamate alla Sub NON contemporanee (se fosse necessaria una dimostrazione, cosa che non è, in quanto non è possibile. Forse lo sarebbe avendo due CPU!).
Due CPU no... È una scatoletta cinese una CPU, mentre una sub scrive il valore boolean è true all'inizio del codice delle due sub c'è il boolean che non fa eseguire il codice se true e quindi non cambia la variabile.
Così funziona devo provare a togliere il boolean e riprovare ma mi sa che prima o poi crasha, per ora va
 

LucaMs

Expert
Licensed User
Longtime User
Due CPU no... È una scatoletta cinese una CPU, mentre una sub scrive il valore boolean è true all'inizio del codice delle due sub c'è il boolean che non fa eseguire il codice se true e quindi non cambia la variabile.
Così funziona devo provare a togliere il boolean e riprovare ma mi sa che prima o poi crasha, per ora va
Il punto è che: non è possibile che una Sub venga eseguita due volte contemporaneamente. Su questo non ci piove!

E' una ResumableSub, giusto? Bene, quello che dovresti fare è solo controllare chi, dove, come e quando la mandi in esecuzione.

E' possibile usare variabili globali boolean, come hai fatto, tanto è vero che nelle app B4A classiche si usa(va) FirstTime nella Activity_Create (non è una variabile creata da noi programmatori, ma la cosa non cambia) e in alcuni casi può essere necessario (perché in B4X non ci sono le variabili locali statiche), ma di sicuro la tua sub non viene eseguita due volte nello stesso istante.
 

Fulvio75

Well-Known Member
Licensed User
Trovato il problema per puro caso.
All'interno delle due sub ci sono due list, mi ha dato l'errore in un altro punto del codice, ho commentato un po' di codice ed è uscito che la list non era inizializzata, cosa impossibile perché l'ho inizializzata correttamente, qui è uscito il dubbio di un probabile errore fasullo trascinato dal codice, ho messo un punto di interruzione dopo add della list per vedere i 15 dati float nella list e uno di questi aveva l'apice per errore davanti '3,56 e quando prendevo i dati dalla list andava in errore in un altro punto del codice.
Non è la prima volta che mi capita di avere degli errori che non c'entrano nulla con il codice segnalato, però non ho capito perché.
 
Top