Italian Variabili di tipo volatile

nicolino33

Active Member
Licensed User
Longtime User
Ciao a tutti, sapete se è possibile creare variabili di tipo volatile in B4A? (accessibili e modificabili da più task o servizi)
 

Star-Dust

Expert
Licensed User
Longtime User
Non ho capito
 

nicolino33

Active Member
Licensed User
Longtime User
variabili VOLATILI, dove è possibile accederci contemporaneamente da più thread, classi, moduli etc... senza incappare in blocchi di sistema o altri problemi.
 

Star-Dust

Expert
Licensed User
Longtime User

udg

Expert
Licensed User
Longtime User
Esempio di variabili volatili:

Dim Fringuello as
Dim Corvo as
Dim Piatto as (chi è sposato può capire..eehehhe).

A parte gli scherzi, credo che intenda le variabili definite in Process_Globals.
Queste appartengono al processo e quindi i vari service, activity e moduli le vedono e le trovano valorizzate per tutta la durata del processo
 

Star-Dust

Expert
Licensed User
Longtime User
Esempio di variabili volatili:

Dim Fringuello as
Dim Corvo as
Dim Piatto as (chi è sposato può capire..eehehhe).

A parte gli scherzi, credo che intenda le variabili definite in Process_Globals
Infatti, non Immaginavo che fosse riferito a una cosa così semplice, e mi chiedevo cosa intendesse
 

nicolino33

Active Member
Licensed User
Longtime User
No ragazzi in realtà è si una cosa semplice una volatile, ma non vedo il modo di utilizzarla in B4A, se non sapete cos'è potete cercare su Google, sono variabili speciali. Dim Fringuello as è una variabile normalissima, non volatile.

Se con un loop controllo e aggiorno un valore presente in questi tipi di variabile da thread differenti il sistema può bloccarsi, perché si tenta di accedere simultaneamente alla stessa variabile da più processi, e questo è possibile farlo soltanto con variabili di tipo volatile, e non standard come int, bool, string etc....

Sebbene apparentemente si può fare, non è il massimo della vita, perché se per ipotesi due processi cambiano nello stesso istante il valore di quella variabile potete capire cosa succede....

Amenochè la dichiarazione di tipo public non pensi già a realizzare questo, è l'unica ipotesi che mi viene in mente.
 
Last edited:

udg

Expert
Licensed User
Longtime User
Ma ti riferisci al linguaggio C?
"
Il modificatore volatile viene utilizzato per indicare al compilatore che il valore di una variabile può essere modificato in modo non esplicitamente specificato dal programma.
Ad esempio l'indirizzo di una variabile globale può essere passata alla routine dell'orologio di sistema, per usare tale variabile per conservare l'ora. In tale situazione il contenuto della variabile verrà modificato senza che il programma faccia un assegnamento.

"
Allora aveva inteso bene @Star-Dust quando diceva che volevi che la variabile fosse disponibile ad altri programmi/processi. In tal caso non credo sia possibile in Android (anche perché passando da un processo ad un altro, il primo potrebbe essere terminato dal sistema operativo)

ps: Fringuello era per ridere..
 

Star-Dust

Expert
Licensed User
Longtime User
Ma ti riferisci al linguaggio C?
"
Il modificatore volatile viene utilizzato per indicare al compilatore che il valore di una variabile può essere modificato in modo non esplicitamente specificato dal programma.
Ad esempio l'indirizzo di una variabile globale può essere passata alla routine dell'orologio di sistema, per usare tale variabile per conservare l'ora. In tale situazione il contenuto della variabile verrà modificato senza che il programma faccia un assegnamento.

"
Allora aveva inteso bene @Star-Dust quando diceva che volevi che la variabile fosse disponibile ad altri programmi/processi. In tal caso non credo sia possibile in Android (anche perché passando da un processo ad un altro, il primo potrebbe essere terminato dal sistema operativo)

ps: Fringuello era per ridere..
Cmq ci sono dei trucchi per crearlo, ma potresti usarlo solo dalle tue App perché conosci il metodo.

Ti invece vuoi qualcosa che gestisce il sistema operativo
 

LucaMs

Expert
Licensed User
Longtime User
La questione riguarda solo i thread.

Nelle app Android non è il caso di usare più thread.

In b4j, nei progetti server, esiste la possibilità di creare map "protette" di questo tipo, usando CreateThreadSafeMap
 

Star-Dust

Expert
Licensed User
Longtime User
In B4A usare più thread contemporaneamente è complicato, dovresti usare una libreria specifica.

Ma con delle variabili globali sul modulo Starter condividi i dati.
Ma credo lui parli condividere variabili con altre App, da sistema.

Comunque quando torna in linea lo spiegherà lui cosa intende, a me non va di ipotizzareno o supporre , riempieremmo di post inutili e magari intende altro.

Come disse qualcuno la realtà è evidente sta davanti a noi le supposte.. Invece no
 

nicolino33

Active Member
Licensed User
Longtime User
Ragazzi grazie per la vostra disponibilità, l'utilizzo che ne devo fare è a livello della mia app, quindi la variabile deve essere aggiornata da più servizi attivi interni all'app. Volevo soltanto accertarmi se era possibile o meno scongiurare errori che normalmente si verificano in casi del genere, mediante appunto l'utilizzo di una volatile. Forse poi è un problema che magari non si verifica nemmeno, ma per sicurezza ho chiesto...
 

Star-Dust

Expert
Licensed User
Longtime User
Ragazzi grazie per la vostra disponibilità, l'utilizzo che ne devo fare è a livello della mia app, quindi la variabile deve essere aggiornata da più servizi attivi interni all'app. Volevo soltanto accertarmi se era possibile o meno scongiurare errori che normalmente si verificano in casi del genere, mediante appunto l'utilizzo di una volatile. Forse poi è un problema che magari non si verifica nemmeno, ma per sicurezza ho chiesto...
Puoi chiamarla variabile globale e metterla in qualunque modulo di codice dichiarandola appunto Public.
Oppure sul servizio Starter e ovviamente dichiararla Public.

Potrai accedervi da qualunque altro Servizio o Activity cosi: NomeModulo.Variabile
 
Last edited:

nicolino33

Active Member
Licensed User
Longtime User
Ti ringrazio, questo già lo sapevo, vorrei soltanto essere certo che nel caso due moduli o servizi vanno a modificare nello stesso istante il valore di quella variabile non ci sono problemi, quindi che sarà il sistema a impostare le priorità in questo senso.
 
Top