Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Mic Mini 2: audio 48 kHz / 24-bit e protocollo OsmoAudio sotto i 100 Euro
DJI Mic Mini 2: audio 48 kHz / 24-bit e protocollo OsmoAudio sotto i 100 Euro
DJI presenta Mic Mini 2, un sistema microfonico wireless ultra-compatto progettato per democratizzare l'audio di alta qualità nella fascia entry-level. Con un peso di soli 11 grammi per il trasmettitore elimina i fastidi tipici dei modelli più pesanti sui vestiti. Nonostante la miniaturizzazione Mic Mini 2 offre prestazioni tecniche di rilievo: registrazione omnidirezionale a 48 kHz/24-bit, tre preset vocali (Regular, Bright, Rich) e un sistema di cancellazione attiva del rumore a due livelli.
Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico
Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico
Motorola propone in fascia media il nuovo Moto G77 5G, uno smartphone che punta sul display AMOLED da 1.5K a 120Hz, e sulla fotocamera da 108 MP con stabilizzazione ottica per affrontare la fascia media. Il tutto insieme a una batteria da 5200mAh in soli 7,3 millimetri di spessore, con una scocca certificata con standard militari
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.
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 Mic Mini 2: audio 48 kHz / 24-bit e protocollo OsmoAudio sotto i 100 Euro DJI Mic Mini 2: audio 48 kHz / 24-bit e protocol...
Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico Recensione Moto G77: display AMOLED e buona auto...
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...
Hisense taglia i prezzi anche dei QLED: ...
MediaTek aggiorna la gamma di SoC: due n...
I biglietti di Trenord arrivano anche su...
GPU, addio GALAX: la casa madre Palit as...
Redmi Note 15 Pro 5G 8GB/256GB da 349€ s...
La propulsione ottica con metajet potreb...
La missione Artemis III potrebbe essere ...
Mad Catz M.M.O. 7+: il mouse MMO da cult...
SAS porta il calcolo quantistico nelle a...
Un miliardo di dollari da SAS per portar...
SAS si apre all'IA di terzi: Viya integr...
Quantinuum si appresta a debuttare in Bo...
Censis: il 60% degli italiani evita i me...
Cloud sovrano: Microsoft potenzia Azure ...
Spionaggio industriale: l'edge è ...
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: 07:49.


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