Differenze tra le versioni di "Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input"

Da Gambas-it.org - Wikipedia.
(Nuova pagina: E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo standard Output e lo standard Input, mediante "''Process''". Facciamo...)
 
Riga 10: Riga 10:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
  <FONT Color=#006400>' ''Avviamo il programma secondario e lo gestiamo con "''Process''":''</font>
+
  <FONT Color=gray>' ''Avviamo il programma secondario e lo gestiamo con "''Process''":''</font>
 
     scnd = Exec ["percorso/secondo.gambas"] For Read Write As "secondo"
 
     scnd = Exec ["percorso/secondo.gambas"] For Read Write As "secondo"
 
   
 
   
Riga 16: Riga 16:
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  '''Public''' Sub Button2_Click()
 
   
 
   
  <FONT Color=#006400>' ''Inviamo al programma secondario il valore numerico:''</font>
+
  <FONT Color=gray>' ''Inviamo al programma secondario il valore numerico:''</font>
 
     Write #scnd, 99 As Byte
 
     Write #scnd, 99 As Byte
 
   
 
   
Riga 24: Riga 24:
 
   
 
   
 
   
 
   
  <FONT Color=#006400>' ''Se potrà essere letto almeno un byte dal processo "secondo", verrà sollevata questa subroutine:''</font>
+
  <FONT Color=gray>' ''Se potrà essere letto almeno un byte dal processo "secondo", verrà sollevata questa subroutine:''</font>
 
  '''Public''' Sub secondo_Read()
 
  '''Public''' Sub secondo_Read()
 
   
 
   
 
   Dim by As Byte
 
   Dim by As Byte
 
   
 
   
  <FONT Color=#006400>' ''Legge i dati scritti dal programma secondo:''</font>
+
  <FONT Color=gray>' ''Legge i dati scritti dal programma secondo:''</font>
 
     Read #scnd, by
 
     Read #scnd, by
 
   
 
   
  <FONT Color=#006400>'' ' Qui mostriamo in console il dato intercettato:''</font>
+
  <FONT Color=gray>' ''Qui mostriamo in console il dato intercettato:''</font>
     TextLabel1.Text = "Dato intercettato modificato = "; CStr(by)
+
     TextLabel1.Text = "Dato intercettato modificato = " & CStr(by)
 
    
 
    
 
  '''End'''
 
  '''End'''
Riga 46: Riga 46:
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
   
 
   
  <FONT Color=#006400>' ''Apre lo standard Input per la lettura...''</font>
+
  <FONT Color=gray>' ''Apre lo standard Input per la lettura...''</font>
 
     flIn = Open "/dev/stdin" For Read Watch
 
     flIn = Open "/dev/stdin" For Read Watch
 
   
 
   
Riga 57: Riga 57:
 
   Dim a, b As Byte
 
   Dim a, b As Byte
 
   
 
   
  <FONT Color=#006400>' ''Legge il dato passato dallo standard Input:''</font>
+
  <FONT Color=gray>' ''Legge il dato passato dallo standard Input:''</font>
 
   Read #flIn, b
 
   Read #flIn, b
 
   
 
   
 
   flIn.Close
 
   flIn.Close
 
   
 
   
  <FONT Color=#006400>' ''Mostra nella propria TextLabel il dato intercettato:''</font>
+
  <FONT Color=gray>' ''Mostra nella propria TextLabel il dato intercettato:''</font>
 
   TextLabel1.Text = CStr(b)
 
   TextLabel1.Text = CStr(b)
 
   
 
   
  <FONT Color=#006400>' ''Effettua la modifica del dato intercettato:''</font>
+
  <FONT Color=gray>' ''Effettua la modifica del dato intercettato:''</font>
 
   a = b + 1
 
   a = b + 1
 
   
 
   
  <FONT Color=#006400>'' ' Apre lo standard Output per la Scrittura...''</font>
+
  <FONT Color=gray>' ''Apre lo standard Output per la Scrittura...''</font>
 
   out = Open "/dev/stdout" For Write
 
   out = Open "/dev/stdout" For Write
 
   
 
   
  <FONT Color=#006400>'' ' ...e vi scrive il valore della variabile "a":''</font>
+
  <FONT Color=gray>' ''...e vi scrive il valore della variabile "a":''</font>
 
   Write #out, a As Byte
 
   Write #out, a As Byte
 
   
 
   

Versione delle 18:06, 27 mag 2017

E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo standard Output e lo standard Input, mediante "Process".

Facciamo un esempio in cui abbiamo un programma principale ed uno secondario.

Avremo il programma principale che avvia il programma secondario (che chiameremo: secondo.gambas) e lo gestisce con Process. Il programma principale invia mediante Process un dato numerico al programma secondario. Il programma secondario intercetta quindi con l'evento _Read() il dato passato dallo standard Input, lo mostra in una TextLabel e lo modifica sommandolo ad un altro valore. Dopo ciò invierà il dato come modificato al programma principale mediante lo standard Output, il quale lo intercetterà mediante l'evento _Read() di Process.

Private scnd As Process


Public Sub Button1_Click()

' Avviamo il programma secondario e lo gestiamo con "Process":
    scnd = Exec ["percorso/secondo.gambas"] For Read Write As "secondo"

End


Public Sub Button2_Click()

' Inviamo al programma secondario il valore numerico:
   Write #scnd, 99 As Byte

End


' Se potrà essere letto almeno un byte dal processo "secondo", verrà sollevata questa subroutine:
Public Sub secondo_Read()

 Dim by As Byte

' Legge i dati scritti dal programma secondo:
   Read #scnd, by

' Qui mostriamo in console il dato intercettato:
   TextLabel1.Text = "Dato intercettato modificato = " & CStr(by)
 
End


Il programma secondario (chiamato: secondo.gambas) che intercetta attraverso lo standard Input il dato inviatogli, e lo re-invia - come modificato - al programma principale attraverso lo standard output, sarà questo:

Private flIn As File


Public Sub Form_Open()

' Apre lo standard Input per la lettura...
   flIn = Open "/dev/stdin" For Read Watch

End


Public Sub File_Read()

 Dim out As File
 Dim a, b As Byte

' Legge il dato passato dallo standard Input:
  Read #flIn, b

  flIn.Close

' Mostra nella propria TextLabel il dato intercettato:
  TextLabel1.Text = CStr(b)

' Effettua la modifica del dato intercettato:
  a = b + 1

' Apre lo standard Output per la Scrittura...
  out = Open "/dev/stdout" For Write

' ...e vi scrive il valore della variabile "a":
  Write #out, a As Byte

  out.Close

End



Al termine dell'intera procedura avremo nella TextLabel del programma secondario scritto il dato: 99, mentre nella TextLabel del programma principale scritto il dato come modificato: 100.