Mshell Funzioni Asincrone
#1
Inviato 27 settembre 2009 - 13:30
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
#2
Inviato 27 settembre 2009 - 15:11
Non puoi però passare parametri se non tramite scrittura e lettura da file...
#3
Inviato 27 settembre 2009 - 16:08
dany666, il 27/09/2009 - 14:30, ha scritto:
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..
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.
#4
Inviato 27 settembre 2009 - 17:53
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;-)
#5
Inviato 27 settembre 2009 - 19:08
dany666, il 27/09/2009 - 18:53, ha scritto:
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?
#6
Inviato 27 settembre 2009 - 19:57
#7
Inviato 27 settembre 2009 - 20:16
dany666, il 27/09/2009 - 20:57, ha scritto:
Non necessariamente, credo si possa fare anche tramite una pipe che consente di scambiare dati tra processi differenti.
( vedi IPC proc.pipe )
I miei 2 cents
Eventualmente, si potrebbero scomodare persino i socket...
Messaggio modificato da Il.Socio il 27 settembre 2009 - 20:59
#8
Inviato 27 settembre 2009 - 20:25
#9
Inviato 28 settembre 2009 - 08:16
#10
Inviato 28 settembre 2009 - 11:16
lento, il 28/09/2009 - 09:16, ha scritto:
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:-)
Messaggio modificato da dany666 il 28 settembre 2009 - 11:23

Aiuto














Pubblicità