Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: zacx85 - 15 Febbraio 2010, 15:46:24

Titolo: Multiprocesso shell
Inserito da: zacx85 - 15 Febbraio 2010, 15:46:24
Ciao a tutti ragazzi,
sono nuovo del forum così come del linguaggio gambas (e quindi 'basic').
Vorrei iniziare con il farvi i miei complimenti per l'ottimo lavoro che state facendo.

Ho già cercato nel forum un post che parli di ciò di cui ho bisogno, ma non ho trovato nulla
di simile.

Io ho la necessità di eseguire simultaneamente più comandi SHELL tenendo traccia del progresso,
magari con il READ di ciascun processo.
Il numero dei comandi che devo eseguire simultaneamente non è fisso, ma dipende dal numero
delle periferiche di memorizzazione collegate al PC.

Per ora il programma funziona egregiamente, nel senso che è in grado di rilevare tutto l'hardware di
memorizzazione dati nel bus USB, formattarlo in ext2 con inode size a 128K, duplicare con dc3dd e
tutte le altre operazioni che deve svolgere, ma vorrei perfezionarlo nel renderlo dinamico, ovvero
creare tanti processi tante quante sono le devices collegate.

Il problema che incontro è che non si può creare un array di processi, quindi non sapendo come
ovviare questo "limite" per ora ho dichiarato 4 processi, 4 timer etc... in quanto per ora sono costretto
ad inserire forzatamente 4 periferiche alla volta. Ecco, io vorrei adattare il codice in modo tale che
io non debba essere costretto ad inserire tassativamente 4 pennette/hard disk alla volta, ma magari 3,
o 7, etc....

Io avrei un'idea, che vi scrivo per cercare di spiegarmi meglio:

Codice: [Seleziona]
DIM timer AS NEW timer
DIM processi AS NER process[]
DIM i AS integer
DIM cmd AD string

'$listaPeriferiche e' una var di tipo NEW String[] globale con l'elenco di tutte le periferiche

FOR i=0 TO $listaPeriferiche.Count
  cmd =  "dd if=/image.img of=/dev/" & $listaPeriferiche[i]
  processi[i] = SHELL cmd FOR READ
NEXT

timer.start

Poi nel timer con un ciclo FOR controllo tutti i processi a che punto sono
Spero di essermi spiegato meglio con quest'ultimo esempio.

Vi ringrazio anticipatamente.
Titolo: Re: Multiprocesso shell
Inserito da: Ceskho - 15 Febbraio 2010, 16:08:57
Dunque, intanto ti do il mio benvenuto e la mia benedizione....[momento liturgico........ok!]

Veniamo a noi (come disse il boomerang)!

Non mi sono mai posto un problema come il tuo ma io farei in questo modo: dichiarerei inizialmente 2 processi e due timer e gli farei lavorare entrambi fino all'esaurimento delle mie periferiche....

Tradotto in italiano vuol dire: immagina di avere 6 periferiche da gestire....fai lavorare entrambi i processi su le prime due,una volta che hai finito passi alle altre due e successivamente alle altre due. Così avrai 3 cicli totali di gestione. In questo modo avrai in un numero di processi fisso (il 2 è indicativo ma calcola che le porte USB solitamente sono pari come numero) e iun numero di cilci variabile in base all'hardware che hai....

Per la questione tempo non devi preoccuparti. Il mio esempio richiede esattamente lo stesso tempo che richiederebbero i sei processi se lanciati contemporaneamente.
Titolo: Re: Multiprocesso shell
Inserito da: fsurfing - 15 Febbraio 2010, 16:30:37
io fossi in te utilizzerei un form con all' interno il codice per la lettura del processo e il rispettivo timer, poi tratti questo form come una classe all' interno di un array di oggetti , in tal modo lanci tanti form(classi) a seconda di quanti processi devi utilizzare, tutto questo discorso funziona se devi lanciare sempre lo stesso tipo di processo cambiando solo alcuni dati e parametri.
Benvenuto nel forum
By fsurfing
Titolo: Re: Multiprocesso shell
Inserito da: Ceskho - 15 Febbraio 2010, 16:32:14
Potrebbe anche creare una classe senaa scomodare un intero form che potrei dovrebbe preoccuparsi di nascondere!

ahahahahhahahahahaaaha
 :P :P :P Che razza di nome è electro?????  :P :P :P
Titolo: Re: Multiprocesso shell
Inserito da: fsurfing - 15 Febbraio 2010, 16:39:21
il form non lo deve nascondere se deve visualizzare l' avanzamento del processo!
ogni giorno che passa  + sei fuso  :P, inoltre prova a mettere un timer in una classe!
è un nome come un altro certamente molto + bello di ceskho che ti fa sputare sul monitor ogni volta che viene letto! ahahahahahahahah
Titolo: Re: Multiprocesso shell
Inserito da: zacx85 - 15 Febbraio 2010, 18:35:52
Grazie ragazzi....

purtroppo i processi che devo fare comprendono anche la copia di diversi GB di dati (con il comando dd), quindi farli due a due è troppo limitativo. Mi posso permettere di fare più processi perchè il transfer rate dei chip usb mlc sono al quanto lenti (circa 40mbps).

Sto pensando si modificare un pò l'idea di electro creandomi un array di classi, vediamo se si può fare....
 
Titolo: Re: Multiprocesso shell
Inserito da: Ceskho - 15 Febbraio 2010, 18:58:15
A mio modesto parere avere 6 finestre aperte per 6 processi diversi è brutto.....al massimo fai una sola barra di avanzamento che tiene conto di tutti i processi...

Un timer lo puoi anche creare dinamicamente come ogni oggetto...
Titolo: Re: Multiprocesso shell
Inserito da: fsurfing - 15 Febbraio 2010, 19:05:48
secondo me invece è molto comodo, puoi vedere istantaneamente l' avanzamento di ogni chip, annullare il trasferimento, aggiungerne altri a caldo ecc ecc, del resto però come diceva la mia prof di mate "non tutti i gusti sono alla menta!
Titolo: Re: Multiprocesso shell
Inserito da: Will32 - 15 Febbraio 2010, 19:26:58
Citazione
A mio modesto parere avere 6 finestre aperte per 6 processi diversi è brutto.....al massimo fai una sola barra di avanzamento che tiene conto di tutti i processi...

Concordo pienamente con te ! Stanno proprio male 6 finestre per sei processi !  ;D

P.S

Non discutete tanto sui nomi, sono particolari tutti e due !  ;)
Titolo: Re: Multiprocesso shell
Inserito da: fsurfing - 15 Febbraio 2010, 19:29:45
@will
se dai ancora ragione a ceskho appena avrò nuovamente i miei poteri ti banno! huahahahaha
Titolo: Re: Multiprocesso shell
Inserito da: Will32 - 15 Febbraio 2010, 19:32:08
Secondo me ...., ci vorrà ancora un pochino per recuperare i poteri !  :P
Titolo: Re: Multiprocesso shell
Inserito da: fsurfing - 15 Febbraio 2010, 19:40:47
 ???
Titolo: Re: Multiprocesso shell
Inserito da: zacx85 - 15 Febbraio 2010, 19:41:59
Aahahhahah, vi spassate con poco è.... mentre io sto smadonnando!!  :o

Datemi una mano, vorrei fare questo:

Codice: [Seleziona]
PUBLIC SUB transfer_Click()
  DIM i AS Integer
  DIM shellMsg, command AS String
  DIM idClass AS NEW Object[]

  IF $hwList.Count > 0 THEN
    FOR i = 0 TO $hwList.Count - 1
      command = "mkfs.ext2 " & $hwList[i] & " -I 128 -L \"UsbDrive\""
    
      TRY idClass[i] = NEW CDuplica ' CDuplica è una classe che svolge principalmente la creazione di un processo
      WITH idClass[i]
        .sCommand = command
        .sNode = $hwList[i]
      END WITH
    NEXT
  
  ENDIF
END

così poi controllo lo stato di ogni processo iterando l'array idClass.

Come si può fare!?!??!
Titolo: Re: Multiprocesso shell
Inserito da: fsurfing - 15 Febbraio 2010, 19:52:13
ti posso dire che l' array di oggetti deve essere dichiarato pubblico a inizio file non dentro una sub per il resto non so esattamente quello che devi e dal codice non si capisce, se ho tempo ti faccio un esempio
Titolo: Re: Multiprocesso shell
Inserito da: Will32 - 15 Febbraio 2010, 20:42:19
Non si capisce molto !  :P
Spiega meglio il codice

Citazione
se dai ancora ragione a ceskho appena avrò nuovamente i miei poteri ti banno! huahahahaha

Visto, adesso ho dato a te ragione !  ;D
Titolo: Re: Multiprocesso shell
Inserito da: fsurfing - 15 Febbraio 2010, 21:21:07
eccoti un esempio di lancio di + processi
Titolo: Re: Multiprocesso shell
Inserito da: zacx85 - 15 Febbraio 2010, 22:29:58
Grazie a tutti..... mi cucino una piadina poi mi metto subito a provare!!  ;D
Titolo: Re: Multiprocesso shell
Inserito da: Pixel - 16 Febbraio 2010, 14:23:48
Grazie a tutti..... mi cucino una piadina poi mi metto subito a provare!!  ;D

<OT ON> Uhm... piadina... di dove sei? ::) <OT OFF>
Titolo: Re: Multiprocesso shell
Inserito da: Picavbg - 22 Febbraio 2010, 09:56:19
@zacx85:
Ho letto solo ora la discussione e capisco che vorresti avere la visione intera dei processi in svolgimento. Io non sono pratico di shell ma a volte un'idea aggiunta permette la costruzione di un modello più adatto allo scopo. Non sapendo a che punto sei, potresti, inserire in un unico form un numero di pannelli corrispondenti al massimo numero teorico di processi da controllare. Penso che converrebbe riunire detti pannelli in un unico gruppo, in modo da crerare un array degli oggetti; Potrebbero avere all'avvio tutti la proprietà "Visible=False", proprietà che potresti trasformare in "True" da codice, il quale, riconoscendo quanti processi sono attivi, all'avvio, accenderebbe, partendo dal primo definito, tutti quelli necessari al monitoraggio dei processi attivi.
Ripeto: è solo un'idea (matrimoniale), che mette insieme, secondo me, la creazione di tanti classi quanti sono i processi attivi e la riunione in un unico form degli oggetti necessari a tenere sotto controllo il lavoro corrente. ;)
Se ho sbagliato concetto, chiedo scusa.
Ciao. :D
Titolo: Re: Multiprocesso shell
Inserito da: dex - 06 Marzo 2010, 00:59:32
eccoti un esempio di lancio di + processi

carino il codice.

se volessi trasformalo in un monoprocesso? cosa devo cambiare?