Newsgroup: it.comp.os.linux.development
Titolo: Come Da Kylix usare le seriali?

mago.poof()
Come in oggetto grazie..........
mago.poof()

 mago.poof()
Nello stesso identico modo che in C, usando la libc, di cui hai tutte (o 
quasi) le funzioni nell'unit LibC, che ovviamente devi dichiarare nel 
blocco uses del tuo programma.
La seriale la apri con qualcosa tipo
TTYHandle := FileOpen('/dev/ttyS0', O_RDWR);
e poi puoi utilizzare Select(), Poll() e quant'altro disponibile a tale 
scopo nella libc. Per leggere o scrivere, puoi usare FileRead e FileWrite. 
Ad esempio, usando la Poll(), si può fare qualcosa del genere:
        GetMem(nfd, sizeof(PPollFD));
        DumpCmd := 'E';
        FileWrite(TTYHandle, DumpCmd, 1);
        nfd.fd := TTYHandle;
        nfd.events := POLLIN;
        Poll(nfd, 1, 0);
        if nfd.revents = POLLIN then
                nc := FileRead(TTYHandle, RxBuf, 256);
        FreeMem(nfd);
Quanto sopra è solo un esempio senza validità autonoma, essendo un piccolo 
estratto da un programma che ho scritto qualche tempo fa.
Penso che questo dovrebbe bastarti, nel caso volessi vedere l'intero 
programma (T7F), pescatelo dal mio sito (
http://digilander.iol.it/i1epj
).
Se non le hai mai usate prima, ti consiglio di leggerti prima di tutto le 
man page di select e di poll (le puoi leggere anche da kylix stesso).
-- 
Ciao ciao.
                                     +++ Giuseppe

 Ad esempio, usando la Poll(), si può fare qualcosa del genere:
C'è un modo di poter usare la poll con kylix in maniera pulita ? ( in 
riferimento alla versione liberamente scaricabile che non ha i controlli 
per gestire socket ).
MI spiego meglio: se io faccio una poll( ) mi metto in attesa di una serie 
di eventi ( proveniente dai descrittori ); ma così facendo  blocco il 
flusso del programma ( idealmente mi dovrei mettere in attesa anche dalla 
socket che è connessa con il server X ! ma anche se ci riuscissi come farei 
ad far rianalizzare la coda eventi ? )

 farei ad far rianalizzare la coda eventi ? )
Qui non so se ho capito bene cosa intendi. In Kylix (come anche in Delphi) 
puoi forzare l'analisi della coda dei messaggi richiamando esplicitamente 
Application.ProcessMessages. Se lo fai eseguire da poll() o da select() 
ogni volta che scade il timeout o che arriva qualcosa dai descrittori, mi 
sembra che il problema sia risolto, anzi, che non esista proprio.
Riassumendo, o io ho capito male quale sia il problema, o tu hai 
dimenticato l'esistenza del parametro timeout di poll() e select().


 dimenticato l'esistenza del parametro timeout di poll() e select().
Diciamo che mi hai dato una mezza soluzione; il mio desiderio era trovare 
un meccanismo che non ricorresse a tecniche di polling.
Se metto un time-out alla poll( ) ( o select( ) ), sto facendo a tutti gli 
effetti una sorta di polling; qt e gtk permettevano di passare alla poll( 
)/select( ) di "sistema" anche dei descrittori aggiuntivi; per cui NON 
c'era un effetto polling.
Grazie comunque; provero la tecnica.

In data Wed, 02 Jan 2002 15:36:14 GMT, nel pieno possesso delle sue facoltà
mentali, Goffredo Baroncelli <krei...@earthling.net.TOGLIMI> scrisse:

Se ho capito bene, tu avresti voluto aggiungere all'elenco passato a select
o a poll un descrittore equivalente alla coda dei messaggi di kylix, così
come nei programmi in console si può aggiungere stdin per gestire l'input
da tastiera, in modo da poter richiamare Application.ProcessMessages o
equivalente nel momento stesso in cui arriva un messaggio, e solo allora,
invece che alla cieca ogni tanto, che ci siano o no messaggi in attesa.
Sarebbe una bellissima soluzione, purtroppo la mia conoscenza di Kylix è
troppo superficiale per dire se si possa fare o no e, se sì, come.
Qualcun altro può dire qualcosa di certo in proposito? Interesserebbe
anche me.
L'unica soluzione che ho trovato sinora è quella che ti ho prospettato,
che, come dici giustamente, fa il polling della coda dei messaggi.


 anche me.
Kylix versione "a pagamento" ( brutta la definizione, ma per capirci ) mi 
sembra include dei controlli per la gestione di socket.... mi basterebbe 
qualcosa del genere: un controllo in cui posso associare degli eventi 
provenienti da dei descrittori, a degli handler ( i metodi di una classe ).