Autore Topic: Multiprocesso shell  (Letto 1720 volte)

Offline zacx85

  • Gamberetto
  • *
  • Post: 4
    • Mostra profilo
Multiprocesso shell
« il: 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.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Multiprocesso shell
« Risposta #1 il: 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.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Multiprocesso shell
« Risposta #2 il: 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

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Multiprocesso shell
« Risposta #3 il: 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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Multiprocesso shell
« Risposta #4 il: 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
« Ultima modifica: 15 Febbraio 2010, 18:18:23 da electro »

Offline zacx85

  • Gamberetto
  • *
  • Post: 4
    • Mostra profilo
Re: Multiprocesso shell
« Risposta #5 il: 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....
 

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Multiprocesso shell
« Risposta #6 il: 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...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Multiprocesso shell
« Risposta #7 il: 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!

Offline Will32

  • Maestro Gambero
  • ****
  • Post: 273
  • Evviva Linux e la Programmazione
    • Mostra profilo
    • TuttoComputer
Re: Multiprocesso shell
« Risposta #8 il: 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 !  ;)

Visita le comunità di Gambas, programma e diventa nostro amico :2birre:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Multiprocesso shell
« Risposta #9 il: 15 Febbraio 2010, 19:29:45 »
@will
se dai ancora ragione a ceskho appena avrò nuovamente i miei poteri ti banno! huahahahaha

Offline Will32

  • Maestro Gambero
  • ****
  • Post: 273
  • Evviva Linux e la Programmazione
    • Mostra profilo
    • TuttoComputer
Re: Multiprocesso shell
« Risposta #10 il: 15 Febbraio 2010, 19:32:08 »
Secondo me ...., ci vorrà ancora un pochino per recuperare i poteri !  :P

Visita le comunità di Gambas, programma e diventa nostro amico :2birre:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Multiprocesso shell
« Risposta #11 il: 15 Febbraio 2010, 19:40:47 »
 ???

Offline zacx85

  • Gamberetto
  • *
  • Post: 4
    • Mostra profilo
Re: Multiprocesso shell
« Risposta #12 il: 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!?!??!

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Multiprocesso shell
« Risposta #13 il: 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

Offline Will32

  • Maestro Gambero
  • ****
  • Post: 273
  • Evviva Linux e la Programmazione
    • Mostra profilo
    • TuttoComputer
Re: Multiprocesso shell
« Risposta #14 il: 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

Visita le comunità di Gambas, programma e diventa nostro amico :2birre: