Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI ha appena ufficializzato la serie Lito, la sua nuova gamma di droni entry-level destinata a chi si avvicina per la prima volta alla fotografia aerea. Al centro dell'annuncio ci sono due modelli ben distinti per fascia di prezzo e specifiche tecniche: DJI Lito 1 e DJI Lito X1. Entrambi si collocano sotto la soglia regolamentare dei 249 grammi, che permette di volare con requisiti burocratici più semplici rispetto ai droni più pesanti.
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Siamo stati a Londra per la premiazione dei Sony World Photography Awards 2026, l'evento a tema fotografia più prestigioso. Fra sorprese e novità, ne approfittiamo per fare il punto sulla fotografia contemporanea, in cui la didascalia è sempre più necessaria a cogliere il senso della quasi totalità degli scatti.
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince
L'elettrica di casa Hyundai propone una versione AWD con estetica derivata dalla famiglia N. L'abbiamo provata per diversi giorni, per scoprire tutti i dettagli e la vera autonomia in autostrada
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2011, 08:09   #1
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
[C] Idea per ciclo di attesa

Salve a tutti
dunque il problema che ho è questo: in un programma scritto in C che deve girare su un sistema Unix-like, devo comprimere alcuni file (non so quanti siano questi file e che dimensione abbiano), quindi devo fare altre operazioni che riguardano l'archivio compresso.
Ora il fatto è questo: mi servirebbe un ciclo di attesa che attenda la fine della compressione, in modo da non utilizzare l'archivio compresso che non è ancora stato totalmente compresso
Qualcuno ha qualche idea?
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 09:30   #2
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Eddie1985 Guarda i messaggi
Salve a tutti
dunque il problema che ho è questo: in un programma scritto in C che deve girare su un sistema Unix-like, devo comprimere alcuni file (non so quanti siano questi file e che dimensione abbiano), quindi devo fare altre operazioni che riguardano l'archivio compresso.
Ora il fatto è questo: mi servirebbe un ciclo di attesa che attenda la fine della compressione, in modo da non utilizzare l'archivio compresso che non è ancora stato totalmente compresso
Qualcuno ha qualche idea?
ciao! bel programmino, che algoritmo di compressione hai utilizzato? sarei curioso anche io di implementarlo uno, ma la compressione proprio non mi viene...

comunque rispondendo...potresti fare un file temporaneo, così da non fare neanche il ciclo..alla fine del processo di compressione lo copi e alla fine avrai solo quest'ultimo salvato sull'hd, mentre il file tmp sarà cancellato.
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 09:48   #3
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
ciao! bel programmino, che algoritmo di compressione hai utilizzato? sarei curioso anche io di implementarlo uno, ma la compressione proprio non mi viene...
l'utente può scegliere se utilizzare il compressore bzip2 oppure gnuzip....non penso sia semplice inventare un nuovo algoritmo di compressione, se è questo che volevi fare


Quote:
comunque rispondendo...potresti fare un file temporaneo, così da non fare neanche il ciclo..alla fine del processo di compressione lo copi e alla fine avrai solo quest'ultimo salvato sull'hd, mentre il file tmp sarà cancellato.
mi sa che non ho spiegato bene il mio problema
con la tua soluzione il problema che avevo ce l'ho lo stesso! non saprei quando ricopiare il file temporaneo, perchè non so a priori quando terminerà la compressione! potrei mettere subito dopo l'inizio della compressione una sleep di un minuto, ma se la compressione dovesse durare di più? oppure se dovesse durare solo 2 secondi? capisci il problema è come poter verificare se la compressione è terminata oppure no
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 09:53   #4
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Eddie1985 Guarda i messaggi
l'utente può scegliere se utilizzare il compressore bzip2 oppure gnuzip....non penso sia semplice inventare un nuovo algoritmo di compressione, se è questo che volevi fare




mi sa che non ho spiegato bene il mio problema
con la tua soluzione il problema che avevo ce l'ho lo stesso! non saprei quando ricopiare il file temporaneo, perchè non so a priori quando terminerà la compressione! potrei mettere subito dopo l'inizio della compressione una sleep di un minuto, ma se la compressione dovesse durare di più? oppure se dovesse durare solo 2 secondi? capisci il problema è come poter verificare se la compressione è terminata oppure no
capisco scusami allora....
comunque magari in pvt mi spieghi come hai fatto che mi interessa per favore?

ma se metti uno sleep in base alla dimensione del file??
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:07   #5
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
Ciao, se usi la system(), essa è bloccante, quindi se sei in monothread non ci son problemi. Se sei in multithread oppure se mandi il programma di compressione in bg allora è più complesso.
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:32   #6
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
comunque magari in pvt mi spieghi come hai fatto che mi interessa per favore?
ho fatto con una fork, e poi con una execlp....cmq non è niente di particolarmente complicato, se googleggi un pò dovresti riuscirci (nel caso contattami)


Quote:
ma se metti uno sleep in base alla dimensione del file??
il problema che cercavo di spiegare è quello, non so a priori la dimensione del file, perchè esso deve essere creato


Quote:
Ciao, se usi la system(), essa è bloccante, quindi se sei in monothread non ci son problemi. Se sei in multithread oppure se mandi il programma di compressione in bg allora è più complesso.
uso fork + execlp che immagino sia la stessa cosa che usare la system....ad ogni modo sono in multithread, avevo dimenticato di scriverlo
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:38   #7
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Eddie1985 Guarda i messaggi
ho fatto con una fork, e poi con una execlp....cmq non è niente di particolarmente complicato, se googleggi un pò dovresti riuscirci (nel caso contattami)
scusami stai facendo un programma con licenza?
è troppo se ti chiedo di passarmi il sorgente? perchè non riesco a capire come implementare la conversione! premetto che è da un pò che non riesco a farlo. Mi accontenterei anche di farlo in single-thread visto che le fork non le ho ancora fatte per bene!
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:48   #8
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
perchè non riesco a capire come implementare la conversione! premetto che è da un pò che non riesco a farlo. Mi accontenterei anche di farlo in single-thread visto che le fork non le ho ancora fatte per bene!

scusa cosa è che non riesci ad implementare precisamente? devi semplicemente fare una cosa del genere:

int ret = fork ();
if (ret = 0) {
execlp ("tar", "tar", nome_archivio, NULL);
....
}
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:50   #9
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Eddie1985 Guarda i messaggi
scusa cosa è che non riesci ad implementare precisamente? devi semplicemente fare una cosa del genere:

int ret = fork ();
if (ret = 0) {
execlp ("tar", "tar", nome_archivio, NULL);
....
}
scusami vorresti dire che execlp ti fa la conversione direttamente? ma in che libreria è presente quella funzione??
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:50   #10
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
scusami prima del nome dell'archivio, se intendi usare gnuzip, anche "-czf" , se usi bzip2 qualcosa di simile (dai un bel man tar )
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:54   #11
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
ok anche man execl ....
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:56   #12
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
Non sei in multithread, sei in multiprocesso.
Devi far attendere al padre la terminazione del figlio. Quindi basta una wait() nel padre. Attenzione alla execlp ed alle exec in generale, tutto ciò che scrivi dopo NON può e NON deve essere eseguito.
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 10:57   #13
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Eddie1985 Guarda i messaggi
ok anche man execl ....
il man cosa fa?
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 11:08   #14
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Ti serve semplicemente di far partire la decompressione su un nuovo thread, che "possiede" un bool che è sempre false finchè non ha finito.

Poi nel thread principale metti

Codice:
pthread_start( thread, decompress, file );

while( !decompressionHasFinished )
{
    //anima la gui, fai quello che ti serve di fare
}

pthread_join( thread );
Quel while può anche essere il "main loop" del programma, quello che conta è che lanci la decompressione su un secondo thread e aspetti così che finisca (o con qualcosa di più complicato tipo una Condition o un pthread_mutex_trylock()).
Il multiprocesso non ti serve!
E' importante non usare wait() (nel caso del processo) o join() (nel caso del thread) subito, perchè altrimenti il primo thread si blocca in attesa del secondo... e in pratica hai un thread solo.
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 18-12-2011 alle 11:12.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 11:13   #15
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
Non sei in multithread, sei in multiprocesso.
il programma che devo scrivere (anzi che ho scritto) è multithread....puoi spiegarti meglio?

Quote:
Devi far attendere al padre la terminazione del figlio. Quindi basta una wait() nel padre. Attenzione alla execlp ed alle exec in generale, tutto ciò che scrivi dopo NON può e NON deve essere eseguito.
ok, quindi quando devo inserire la wait() ? dopo la fork prima di execl?


Quote:
il man cosa fa?
seh vabbè.........
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 11:21   #16
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Eddie1985 Guarda i messaggi
seh vabbè.........
scusami ma man serve solo a vedere il manuale o sbaglio? non e' una funzione...
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 11:24   #17
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
Un conto sono i processi (diverso descrittore di processi, diverso spazio di indirizzamento, etc...) un conto sono i thread. C'è molta letteratura in giro che ti spiega per bene la differenza tuttavia il grosso vantaggio è che hai la possibilità di accedere alle variabili (condivise) del processo che li crea.
Nel tuo caso sei in multiprocesso. La fork() crea un processo.

Se vuoi utilizzare i thread, per il C, ci sono i POSIX thread (pthread).
Per creare un pthread si utilizza la pthread_create(..)
L'accesso alle variabili condivise avviene attraverso l'uso di semafori, (pthread_mutex_t). Tuttavia è un argomento troppo vasto per dare una spiegazione esaustiva ed alla fine scriverei un libro sulla programmazione concorrente
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 11:26   #18
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Ti serve semplicemente di far partire la decompressione su un nuovo thread, che "possiede" un bool che è sempre false finchè non ha finito.

Poi nel thread principale metti

Codice:
pthread_start( thread, decompress, file );

while( !decompressionHasFinished )
{
    //anima la gui, fai quello che ti serve di fare
}

pthread_join( thread );
Quel while può anche essere il "main loop" del programma, quello che conta è che lanci la decompressione su un secondo thread e aspetti così che finisca (o con qualcosa di più complicato tipo una Condition o un pthread_mutex_trylock()).
Il multiprocesso non ti serve!
E' importante non usare wait() (nel caso del processo) o join() (nel caso del thread) subito, perchè altrimenti il primo thread si blocca in attesa del secondo... e in pratica hai un thread solo.

mmm qualcosa ho capito, anche se non tutto. il fatto è questo: io nel main ho creato vari thread che soddisferanno varie richieste giunte dal client (fra cui la compressione di file)....quando c'è una richiesta un thread chiama una funzione che supponiamo sia gestisci_richiesta() .... dentro questa funzione poi posso creare un altro thread come mi consigli tu?
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 11:27   #19
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
Originariamente inviato da starfred Guarda i messaggi
Un conto sono i processi (diverso descrittore di processi, diverso spazio di indirizzamento, etc...) un conto sono i thread. C'è molta letteratura in giro che ti spiega per bene la differenza tuttavia il grosso vantaggio è che hai la possibilità di accedere alle variabili (condivise) del processo che li crea.
Nel tuo caso sei in multiprocesso. La fork() crea un processo.

Se vuoi utilizzare i thread, per il C, ci sono i POSIX thread (pthread).
Per creare un pthread si utilizza la pthread_create(..)
L'accesso alle variabili condivise avviene attraverso l'uso di semafori, (pthread_mutex_t). Tuttavia è un argomento troppo vasto per dare una spiegazione esaustiva ed alla fine scriverei un libro sulla programmazione concorrente
si il programma che sto facendo usa i pthread....leggi il post sopra che ho appena scritto per capire la situazione
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2011, 11:29   #20
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
Originariamente inviato da tecno789 Guarda i messaggi
scusami ma man serve solo a vedere il manuale o sbaglio? non e' una funzione...

serve per vedere il manuale e capire il funzionamento delle funzioni, ad esempio.
nel tuo caso mi sembra che devi capire il funzionamento della funzione execl (e probabilmente anche della tar) quindi usa pure la funzione man
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla DJI Lito 1 e Lito X1 recensione: i nuovi droni p...
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi Sony World Photography Awards 2026: i premiati, ...
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince Una settimana con Hyundai Ioniq 5 N-Line: divert...
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Xbox Game Pass sarà disponibile a...
La serie HONOR 600 avrà presto un...
Mova Viax 250 in prova: il robot tagliae...
Fat e-bike per tutti: sconti Engwe, pi&u...
Google conferma l'arrivo della nuova ver...
Apple ha trovato il modo per abbassare i...
OpenAI vuole tassare l'AI per dare a tut...
MacBook Air 15'' con chip M4 a 1.199€ su...
Samsung Galaxy S25 Edge 12/512GB a 854€ ...
Super offerta sul portatile gaming Acer ...
Nanotubi di carbonio più conduttivi del ...
LG OLED evo C5 48'' a 614€ e G5 83' a 3....
Ricavi record per Samsung ma la division...
TOP 7 Amazon del weekend: gli sconti al ...
Volvo e Design Week: al Volvo Studio di ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:31.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v