Newsgroup: it.comp.lang.visual-basic
Titolo: Credo si chiami pick-up

Bene
ho finalmente migliorato un pochetto il mio splitter, usando le api (preso
come spunto l'esempio di piccinotti sul sito comune) ma ora nasce un
problema. Quando lavora, la finestra rimane completamente bloccata, e in
alcuni punti cambia colore (diventa bianca) inoltre risulta inattiva, quindi
se cerco di premere il tasto "esci" mentre splitta, non funziona.
Credo che si possa ovviare in qualche modo a questo problema, e mi hanno
detto che in VC questa operazione (che m'hanno detto chiamarsi peak o roba
simile) si può realizzare con questo codice:
MSG message;
while (::PeekMessage(&message,NULL,0,0,PM_REMOVE)){
 ::TranslateMessage(&message);
 ::DispatchMessage(&message);
        }
qualcuno ha idea di come si possa fare in VB?
grazie

 splitta, non funziona. Credo che si possa ovviare in qualche modo a
Se c'č un loop puoi mettere un doevents ben piazzato altrimenti non saprei
come aiutarti...
Ciao

 ha scritto nel messaggio
news:ao612v$1877$1...@half.spin.it...


 Qualche consiglio in piů? grazie
1) quota correttamente
2) posta qualche estratto del tuo codice
Salutoni
Sergio

 2) posta qualche estratto del tuo codice
riporto il ciclo for preso integralmente dall'esempio di piccinotti cui
facevo riferimento nei precedenti post:
For k = 1 To n + 1
      fil = file & Format(k, "000")
      hFile2 = CreateFile(fil, GENERIC_WRITE, 0, ByVal 0&, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0)
        'quando deve essere scritto l'ultimo file, i byte da leggere dal
file da splittare cambiano!
        If k = n + 1 Then ByteToRead = dimensione_origine - n * filesize
        stringbuffer = Space(ByteToRead) 'buffer in cui vanno i bytes letti
        'aggiorna la progress bar
        DoEvents ' Questo č quello che ho messo io come detto in precedenza
        ProgressBar1.Value = 100 * ((k - 1) / (n))
        Label3.Caption = fil
        Label1.Refresh
        'legge i byte desiderati con le API per far piů veloce
        retval = ReadFile(hFile1, ByVal stringbuffer, ByteToRead, numread,
ByVal CLng(0))
        retval = WriteFile(hFile2, ByVal stringbuffer, Len(stringbuffer),
numwritten, ByVal 0&)
      retval = CloseHandle(hFile2)
    Next k
Giacchč ci sono vi chiedo un altro suggerimento. E' possibile giocare in
qualche modo coi buffer per velocizzare l'operazione e utilizzare meno
risorse? con spezzoni fino a 50 MB va a gonfie vele, oltre i 50 MB il
processo si appesantisce abbastanza. Grazie

 processo si appesantisce abbastanza. Grazie
Spezzoni da 50Mb e oltre? Ti credo che il DoEvents ha poca influenza! E poi
quanta memoria ti ciuccia?
Prova con spezzoni da 50Kb, ho detto Kb.

 Prova con spezzoni da 50Kb, ho detto Kb.
beh, fino a 50 MB va benissimo e non utilizza più di tant amemoria, ho visto
di peggio. Oltre i 50 va un pò in crisi. Ma non credi che ci sia un modo? In
fondo winrar e altri lo fanno. Con spezzoni da 50K va una scheggia. Ma prova
te a spezzare un file da 1GB in pezzi da 50K...
Ciao

 te a spezzare un file da 1GB in pezzi da 50K...
Vuoi la mia?
Ho fatto prove con 100 bytes e con 10000 bytes. Non cambia di molto.
Se con 50Kb va che č una scheggia (e il sistema puň respirare ogni tanto,
quel tanto che gli basta), perchč soffocarlo con un respiro lungo 50Mb?
Hai provato a leggere/scrivere blocchi da 50Kb? Quanto, in totale, impiega
rispetto a blocchi da 50Mb (a parte la finestra che si incastra)? Tu lo puoi
sapere, diccelo.

 sapere, diccelo.
Ok, avevo frainteso la tua proposta. Proverò e vi farò sapere, per ora non
posso, le donne sono una rottura... e nn mi lascia stare al pc!
Ciao

 sapere, diccelo.
Ho fatto una prova al volo con blocchi da 10MB e va veramente veloce.
Ovviamente l'ho fatto forzando la dimensione del buffer senza però
preoccuparmi di altro, per cui non ha splittato tutto il file da 700MB che
gli avevo dato in pasto, ma ha creato solo 7 spezzoni da 10MB (benchè gli
avessi detto i farmene 7 da 100MB). Questo perchè non ho impostato il loop
per fargli scrivere tutto lo spezzone prima di passare al successivo.
Qualcuno ha qualche suggerimento su come crearlo nella maniera migliore
possibile? grazie e ciao

Ciao
grazie per l'aiuto prima di tutto. Volevo farvi sapere che ho risolto il
problema utilizzando un buffer fisso per file oltre determinate dimensioni.
L'esempio di piccinotti in pratica utilizza un buffer pari alla dimensione
scelta per lo spezzone. Quindi per spezzoni di 100MB usa un buffer di 100MB,
che è decisamente troppo. Io ho fatto delle prove con buffer da 10MB, 1MB e
500K, e ne è venuto fuori che la versione più veloce è la seconda. Che ne
pensate? è un risultato che rispecchia le aspettative? O c'è qualcosa di
strano?
Voglio dire, dovrebbe funzionare ancora meglio con un buffer più piccolo? a
logica mi sembrerebbe di no, anche perchè parliamo di files molto grossi, e
se da un lato si guadagna in risorse di sistema, dall'altro si aumenta il
numero di cilci per ciascun o spezzone. dico bene?

 numero di cilci per ciascun o spezzone. dico bene?
Tieni presente che se non c'e' abbastanza RAM libera il s.o. deve ricorrere
al file di swap (che e' su disco).
Quindi: tieni presente le risorse hardware installate e mediamente libere
delle macchine che useranno il tuo programma.
Se gli utenti hanno 64 MB di RAM, dischi ide non particolarmente performanti
e svariate applicazioni aperte, piu' e' grosso il buffer e piu' rallenti.
--
ciao, hal
--------------------------------
Inviato via 
http://usenet.libero.it

 e svariate applicazioni aperte, piu' e' grosso il buffer e piu' rallenti.
Si questo l'ho considerato. Ma quello che chiedevo a voi č: secondo voi 1MB
di buffer č eccessivo?
E' la prima volta che lavoro con i buffer e vorrei avere un parere da gente
piů esperta.
Grazie