Differenze tra le versioni di "Porre sotto osservazione con Read Watch due o più file"

Da Gambas-it.org - Wikipedia.
Riga 67: Riga 67:
 
   fl1 = Open "''/percorso/del/primo/file''" For Read Watch
 
   fl1 = Open "''/percorso/del/primo/file''" For Read Watch
 
  <FONT Color=gray>' ''Viene associato il primo oggetto File alla denominazione del proprio evento:''</font>
 
  <FONT Color=gray>' ''Viene associato il primo oggetto File alla denominazione del proprio evento:''</font>
   Object.Attach(fl1, FMain, "eventofile1")
+
   Object.Attach(fl1, MMain, "eventofile1")
 
   
 
   
 
   
 
   
 
   fl2 = Open "''/percorso/del/secondo/file''" For Read Watch
 
   fl2 = Open "''/percorso/del/secondo/file''" For Read Watch
 
  <FONT Color=gray>' ''Viene associato il secondo oggetto File alla denominazione del proprio evento:''</font>
 
  <FONT Color=gray>' ''Viene associato il secondo oggetto File alla denominazione del proprio evento:''</font>
   Object.Attach(fl2, FMain, "eventofile2")
+
   Object.Attach(fl2, MMain, "eventofile2")
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 15:24, 27 apr 2015

Se si tenta di porre sotto osservazione con Read Watch due o più file, e si impostano le due sub-procedure di lettura File_Read() per ciascun file osservato, viene sollevato un errore di coesistenza di più di una della predetta sub-procedura di lettura di file posti sotto osservazione.

Per ovviare a questo grosso problema, che impedisce di porre sotto osservazione con Read Watch due o più file, sono possibili almeno tre soluzioni.


Uso di una Classe specifica

La prima modalità prevede la creazione - per ciascun file che si intende porre sotto osservazione con le parole chiave Read Watch - di una specifica Classe.


Nell'esempio astratto, che segue, porremo sotto osservazione due file-device.
Nella Classe principale porremo sotto osservazione un file:

Private fl As File
Public cl As New Class1


Public Sub Main()

' Invochiamo la sub-procedura della Classe secondaria per porre sotto osservazione il secondo file:
 cl.Osserva()

' Poniamo sotto osservazione il primo file:
 fl = Open "/percorso/del/primo/file" For Read Watch
 
End


Public Sub File_Read()
 
 Dim s As String
 
  Read #fl, s, -256
  Print s
 
End


Nella Classe secondaria specifica porremo sotto osservazione il secondo file:

Private fl As File


Public Procedure Osserva()
 
 fl = Open "/percorso/del/secondo/file" For Read Watch
 
End


Public Sub File_Read()
 
 Dim s As String
 
  Read #fl, s, -256
  Print s
 
End


Uso del metodo Object.Attach

La seconda modalità prevede l'uso del metodo .Attach() della Classe Object.

Private fl1 As File
Private fl2 As File


Public Sub Main()

 fl1 = Open "/percorso/del/primo/file" For Read Watch
' Viene associato il primo oggetto File alla denominazione del proprio evento:
 Object.Attach(fl1, MMain, "eventofile1")


 fl2 = Open "/percorso/del/secondo/file" For Read Watch
' Viene associato il secondo oggetto File alla denominazione del proprio evento:
 Object.Attach(fl2, MMain, "eventofile2")

End


' Vengono intercettati i dati provenienti dal primo file:
Public Sub eventofile1_Read()

 Dim b1 As Byte

  Read #fl1, b1
  Print b1

End


' Vengono intercettati i dati provenienti dal secondo file:
Public Sub eventofile2_Read()

 Dim b2 As Byte

  Read #fl2, b2
  Print b2

End