Newsgroup: it.comp.lang.visual-basic
Titolo: Accessi concorrenti

Ciao a tutti, il problema è il seguente:
Sulla stessa macchina posso avere un input che mi proviene da un lettore di
codici a barre e simultaneamente da tastiera.
L'input che proviene dal lettore deve andare a caricare delle informazioni
sul database, nello stesso tempo un operatore da tastiera può andare ad
elaborare altre informazioni contenute nel database. E' possibile fare
questo con un solo programma, o è necessario sviluppare due programmi
separati, che naturalmente accedono alla stessa base dati?

 ha scritto nel messaggio
news:NPeV9.33401$0v.9...@news1.tin.it...

Dipende.
L'input da lettore bar-code arriva sulla seriale o emula una tastiera?
Se arriva da seriale, puoi tranquillamente fare due applicazioni diverse, di
cui quella che ascolta la seriale può stare in background.
Se invece il lettore ti 'parla' attraverso la tastiera, occorre
tassativamente avere un unico applicativo, che riesca a distinguere fra ciò
che viene inserito dall'operatore e ciò che invece arriva dal lettore.
E' più semplice di quanto si pensi, in quanto ciò che arriva dal lettore
spesso è simulato come premuto da tastierino numerico e non da tastiera
(ovviamente se il tuo barcode non prevede caratteri alfabetici), e con un
ritardo fra le singole pressioni sicuramente inferiore a qualche centesimo
di secondo. Monitorando le sequenze rapide da tastierino, si compone
facilmente una stringa. Se questa stringa contiene troppi caratteri,
significa che l'operatore ha premuto un tasto a metà di una lettura, per cui
occorre scartare la lettura e segnalarlo, altrimenti controlli il checksum e
esegui quanto serve.
Ciao
Alberto

Il lettore funziona in emulazione tastiera.
Ma quello che io mi chiedo è questo:
    Siamo in due a fare due operazioni diverse, ad esempio io sto caricando
i dati tramite il lettore, il mio socio sta visualizzando degli articoli in
magazzino, possiamo entrambi operare oppure dobbiamo alternarci?

 ha scritto nel messaggio
news:e1fV9.33479$0v.9...@news1.tin.it...

Potete operare entrambi, ma il software deve prestare attenzione al discorso
che ti dicevo prima.
Io ho diverse applicazioni che girano in quella modalità, e in due anni
credo ci sia stata una sola occasione di interferenza fra i dati, segnalata
all'operatore che ha dovuto semplicemente ridigitare un codice.
Ciao
Alberto

Scusa ancora un attimo,
Quindi se ho capito bene:
    Io lavoro su una finestra e l'altro operatore su un altra ed entrambi
gli eventi si verificano?
Un ultima cosa:
Cosa vuol dire controlla il checksum?

 Cosa vuol dire controlla il checksum?
Sui bar-code, è possibile attivare il controllo di un codice di checksum,
ossia un codice che convalida la lettura. Se questo esiste (e visto che devi
evitare interferenze fra i due input credo sia quasi d'obbligo), un
eventuale tasto premuto in sincronia con il lettore barcode sarebbe quasi
sicuramente individuato come errato, e l'applicativo potrebbe avvertire
l'utente.
Ciao
Alberto

Ok allora ho capito.
Però il problema mi rimane: Devo permettere che due persone diverse sulla
stessa macchina compino operazioni diverse, cioè che lavorino una su un form
e l'altra su un altro form. Utilizzando un lettore di bar code che emula la
tastiera come posso risolverlo?

 ha scritto nel messaggio
news:cffV9.33556$0v.10...@news1.tin.it...

Allora hai cambiato le carte in tavola.
Hai detto che l'input da lettore deve andare a caricare qualcosa sul DB.
Perchè mai occorre una form diversa da quella che sta usando l'operatore da
tastiera?
La stessa form farà entrambe le cose, una cosa in modalità interattiva e una
cosa in modalità batch.
Non vedo altro modo, se non utilizzare le API (credo GetAsyncKey o qualcosa
del genere), ma ti vai a incasinare in una cosa molto difficile da gestire,
e che richiede un SystemTimer molto veloce, con tutti i problemi di CPU che
ne conseguono.
Ciao
Alberto

non ho cambiato le carte in tavola.
L'operatore da tastiera in generale puň svolgere operazioni diverse.
Mi spiego meglio.
Devo fare un programmino per la gestione del punto vendita.
Con il lettore faccio il carico e lo scarico di magazzino che fisicamente č
"distante" dal computer. Nello stesso tempo un operatore davanti al pc vuole
stampare una fattura, capisci che queste sono due operazioni differenti che
implicano l'utilizzo di form differenti.
Spero di essermi spiegato meglio

 implicano l'utilizzo di form differenti.
Ascolta, io ho molta pazienza, però se insisti ancora un po' con questa
storia delle due form differenti comincio a scaldarmi.
Chi ti ha detto che servono due form diverse?
Ripeto:
Ne usi una sola, che fa due cose diverse, e in una giornata di lavoro hai
risolto tutti i tuoi problemi.
Quando la form riceve u input, capisce se arriva da tastiera (e quindi
popola i controlli sulla form) o da lettore (e allora non popola i controlli
ma opera solo a livello di codice)
Ciao
Alberto

Ho capito, scusa ma sono un pò duro.
Grazie per l'aiuto