Quindi, prima di parlare di perchè "non funziona", sarebbe il caso che ci spiegassi cosa stai cercando di fare, e non in modo così generico...
Sì, hai ragione: ci vuole "precisione".
Dunque... l'argomento da me posto è relativo all'intercettazione di dati
grezzi provenienti da un dispositivo Midi (...tanto per cambiare
) esterno (per esempio una tastiera). In vero, non ho problemi nell'intercettare tali dati, poiché i modi possono essere diversi
(Vedi in basso nota 1).
Quasi tutti (tranne uno) i programmini da me realizzati, che intercettano dati Midi dall'esterno, adoperano questa riga di comando:
flusso = OPEN "/dev/snd/midiC2D0" For Read Watch
laddove "/dev/snd/midiC2D0" è il file-device che viene creato nel momento in cui viene connessa una tastiera Midi al PC.
Ad un certo punto... mi è venuto in mente di offrire all'utente la possibilità, dopo aver aperto il file-device per ricevere i dati, di richiuderlo mediante:
per bloccare l'intercettazione dei dati (cosa che avviene); nonché di consentirgli poi di
ri-aprirlo, qualora voglia ricominciare a ricevere dati dal dispositivo Midi esterno, passando nuovamente per la riga di apertura con
OPEN.
Ebbene, la riapertura
non avviene.
Se, invece, questo procedimento lo effettuo gestendo il file-device con
Process, posso chiuderlo e riaprirlo tutte le volte che voglio.
Lo so... qualcuno potrebbe dire:« Allora opera con "
Process" ! ». Ma non vorrei usare
Exec o
Shell. Inoltre a questo punto vorrei
comprendere la questione.
Vorrei fare un aggiornamento sulla questione di
Pipe, poco sopra esposta.
Ho provato a fare una modifica alla riga:
Public Sub Pipe_Read(). Avevo scritto
Pipe_Read(), come avevo letto nella guida:
«
Se la parola chiave WATCH viene specificata, la pipe viene vista dall'interprete come:
* Se alla fine della pipe può essere letto un byte, allora viene chiamato l'evento Pipe_Read(). ».
Ma come ho già detto, non leggo dati. Ed allora ho modificato quella riga così:
...e così funziona, nel senso che l'evento è sollevato, ed io sono in grado di leggere i dati.
Però, anche con
Pipe se chiudo, e poi voglio
ri-aprire il flusso, non si ri-apre (così come succedeva con
Open), e non posso dunque tornare a leggere dati.
Un paio di domande:
* come mai con
Pipe_Read() non viene sollevato l'evento ?
* ma soprattutto... in questo caso è meglio usare "
Pipe" al posto di "
Open" ?
Note:
[1] Al riguardo vedi:
http://www.gambas-it.org/wiki/index.php/Gestione_del_MIDI_con_ALSA#Alsa_e_Gambas:_Gestione_dei_dati_Midi_in_.22Ricezione_dati.22
P.S.: A proposito, ma "cesko" l'hanno preso le guardie?!?
...effettivamente...... è sparito !