Jump to content
Nokioteca Forum

Mshell Funzioni Asincrone


dany666
 Share

Recommended Posts

Ciao, ho da poco inziato a "giocare" con mshell, devo dire che e' un linguaggio estremamente interessante e semplice (almeno per me che provengo dal c++ in ambiente windows) , naturalmente piu' "gioco" e piu' mi rendo conto che mancano alcune cose estremamente utili e poi ci sono cose che non mi sono chiare...una delle cose che non mi e' ben chiara e' la chiamata a funzioni asincrone... dal manuale mi sembra di aver capito che e' possibile una chiamata a funzioni asincrone per modulo, ed ecco una prima domanda:

1) se creo una nuova procedura e la chiamo dallo script principale con proc.run() ...questa verra' eseguita in modo asincrono rispetto allo script principale o per poter riprendere lo script principale dovro' attendere che la procedura chiamata giunga al termine?

Un' altra domanda

2)e' possibile creare dei timer in un singolo script (per cosi' dire in stile MFC windows) con i quali eseguire ogni tot secondi qualcosa ? naturalmente in questo secondo caso non sarebbe un vero multithreading ma in molti casi basterebbe.

Grazie a tutti

Link to comment
Condividi su altri siti

Non ho mai provato, però penso che l'esecuzione avvenga in maniera asincrona, basandomi sul fatto che quando dalla schermata principale avvii più script contemporaneamente questi vanno avanti indipendentemente gli uni dagli altri...

Non puoi però passare parametri se non tramite scrittura e lettura da file...

Link to comment
Condividi su altri siti

Ciao..... e' la chiamata a funzioni asincrone... dal manuale mi sembra di aver capito che e' possibile una chiamata a funzioni asincrone per modulo, ed ecco una prima domanda:

1) se creo una nuova procedura e la chiamo dallo script principale con proc.run() ...questa verra' eseguita in modo asincrono rispetto allo script principale o per poter riprendere lo script principale dovro' attendere che la procedura chiamata giunga al termine?

Un' altra domanda

2)e' possibile creare dei timer in un singolo script (per cosi' dire in stile MFC windows) con i quali eseguire ogni tot secondi qualcosa ? naturalmente in questo secondo caso non sarebbe un vero multithreading ma in molti casi basterebbe.

Grazie a tutti

Dalla mia notevole esperienza.. :unsure: n'ciò capito un tubo? :)

A parte gli scherzi.....non posso aiutarti.....è un argomento che non hò ancora toccato.

Però ti propongo un Dacce na mano! se nessuno riesce in tempi ragionevoli a darti un esaudiente spegazione,

la risposta a quanto chiedi la puoi ottenere scrivendo un piccolo codice e provandolo.

Se poi gentilmente rendi partecipi gli adoratori di mShell mostrando il codice impariamo qualcosa anche noi.

Causa la mia enorme conoscenza dell'Inglese quando non capisco certe parti del manuale, Sperimento

scrivo frammenti di codice e vedo se l'idea che mi ero fatto e i risultati pratici coincidono.

Link to comment
Condividi su altri siti

Seguendo il consiglio di lento e le rassicuranti intuizioni di masmil1988, ho deciso di fare delle prove, in effetti lanciando una procedura da uno script questa lavora in modo asincrono rispetto allo script principale .

Caro lento, la differenza fra una chiamata sincrona o asincrona non ha nulla di misterioso ad esempio:

a=a+1;

func();

b=a+2;

...ecc ecc

immagina di eseguire questo codice se la func() e una funzione sincrona prima di eseguire b=a+2 la funzione deve essere completamente eseguita... mentre se la funzione e' asincrona la funzione e' "lanciata" dopo a=a+1 ma il programma non aspetta che la funzione "termini"...e il codice seguente b=a+2 sara' eseguito indipendentemente che la func() sia o no terminata.

In mshell ad esempio ho notato che e' possibile lanciare funzioni asincrone con grosse limitazioni, e cercavo un modo per superare questo limite, per ora il modo migliore penso sia quello di lanciare diverse procedure.

A cosa potrebbe servire tutto cio'...? :-) ad esempio immaginiamo di voler controllare gli sms inviati ogni 10 secondi, per mandarne una copia ad un dato numero di tel, ma immaginiamo anche di voler controllare altre cose contemporaneamente...quindi ovviamente dovremmo ricorrere a funzioni asincrone lanciando una procedura tipo la seguente(e' un esempio il codice non l' ho testato):

use time,sms,msg

numtel="xxxxxxxxxxx";

while true do /* ciclo principale */

tia=time.get();

tia=tia-10;

for m in msg.scan(msg.sent,msg.msg,"*") do

ti=m["time"];

if ti>tia then

sms.send(numtel,m["descr"]);

end;

end;

sleep(10000);

end;

ogni 10 secondi se c'e' un messaggio inviato nuovo(cioe' arrivato nei 10 secondi precedenti) questo verra' inviato al numtel, pero' il programma principale da cui la procedura e' stata lanciata potra' continuare a fare altre cose o a lanciare altre procedure.

Spero di essermi spiegato...piu' o meno;-)

Link to comment
Condividi su altri siti

Molto interessante......Grazie della chiara spiegazione.

Se ho ben capito asincrono possiamo vederlo un pò come: Un programma principale che avvia altri programmi sempre in mShell

ed ognuno se ne và per i fatti suoi.

Ad esempio potremmo avere un programma che lancia altri due di nome pa e pb

pa se ne va per i fatti suoi e si diverte a creare nella directory /Documents/ dei file in progressione

a0.txt,a1.txt,a2.txt ecc... mentre pb si diverte a cancellare i file a0.txt,a1.txt,a2.txt

Ogni tanto pa verifica se ci sono tutti....e si incavola come una bestia....e ricomincia a scrivere i mancanti....

Ma anche pb verifica se ce ne sono di nuovi e ricomincia a cancellarli....

Praticamente tra i due litiganti solo il programma che li ha lanciati se la gode. Giusto?

Link to comment
Condividi su altri siti

hihihi....proprio cosi'!... l' unico limite , come diceva masmil1988, e che una volta che il programma principale lancia le procedure...non puo' scambiare dati se non con lettura e scrittura su file. In sostanza se vogliamo comunicare nuovi dati alle nostre procedure "figlie" allora bisognera' scriverli su file... e insegnare alle procedure "figlie" a dare ogni tanto un occhiata ai file di comunicazione.

Link to comment
Condividi su altri siti

non puo' scambiare dati se non con lettura e scrittura su file.

Non necessariamente, credo si possa fare anche tramite una pipe che consente di scambiare dati tra processi differenti.

( vedi IPC proc.pipe http://www.m-shell.net/documentation/libra...roc_module.html )

I miei 2 cents :)

Eventualmente, si potrebbero scomodare persino i socket...

Modificato da Il.Socio
Link to comment
Condividi su altri siti

Ora spero che le cose che ti mancano siano un pò di meno!

Ricorda mShell, comunque è sempre un linguaggio non compilato ed in origine doveva essere una semplice shell.

Non c'e' dubbio, che in origine mshell fosse indirizzato ad un uso "non professionale" per cosi dire...e che il fatto di non avere a che fare con API symbian fosse bilancato da una facilita' di utilizzo, come ti ho detto ho iniziato da poco a studiare questo linguaggio, ma credo che abbia avuto uno sviluppo non indifferente, basti pensare all' introduzione delle classi (che lo fanno somigliare molto al c++)e poi al fatto che e' possibile creare file .sis , quindi se lo sviluppo dovesse continuare potrebbe essere possibile utilizzarlo anche per scopi professionali. Non credo che bisognerebbe aggiungere moltissime cose , secondo me una sarebbe la gestione vera del multithread, un' altra l'introduzione di GUI standard (tipo ablib ) e magari la possibilita' di chiamare API symbian ,quando sono davvero necessarie:-)

Modificato da dany666
Link to comment
Condividi su altri siti

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share

×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy