PDA

View Full Version : [C++] Thread Linux


Emalele1688
13-05-2011, 20:02
Salve a tutti:)

Mi sono imbattuto in un programma in c++ che fa uso di threads per gestire i diversi flussi, e fin ora sto usando POSIX Threads (che chiaramente è in C, no C++) ...
Volevo sapere qual'è una buona interfaccia per gestire i threads in C++ nei sistemi UNIX (particolare linux)...

Grazie a tutti in anticipo ...

cionci
14-05-2011, 18:03
La libreria boost ha una buona gestione dei thread (e di molto altro). Se non sbaglio quella parte entrerà nel prossimo standard C++.
A seconda del tipo di progetto potrebbe essere plausibile l'uso delle librerie QT, ovviamente se potessero essere usate anche per altre cose.
In alternativa puoi incapsulare i pthread in una classe C++ da cui puoi derivare i tuoi thread. Un esempio: http://www.linuxselfhelp.com/HOWTO/C++Programming-HOWTO-18.html

Emalele1688
15-05-2011, 10:34
Molte grazie della risposta cionci .... Inizierò dal framework boost, poiché sembra che il futuro del C++ stia puntando li, e cerco sempre di evitare di mischiare codice C con codice C++ ...

cionci
15-05-2011, 10:43
Molte grazie della risposta cionci .... Inizierò dal framework boost, poiché sembra che il futuro del C++ stia puntando li, e cerco sempre di evitare di mischiare codice C con codice C++ ...
Dipende da quello che devi fare. Se dovessi limitare la roba da portarmi dietro incapsulerei le chiamate alla libpthread. Tra l'altro mischiare codice C e C++ in questo modo è tutt'altro che sporco, anzi è un ottimo indizio di qualità del programmatore ;)

Tommo
15-05-2011, 12:28
Mah, se il futuro di C++ punta li, il mio punta da tutt'altra parte :D
Boost è troppo ingombrante per essere utile, e non mi piace per tutta una serie di altri motivi.

Comunque, potresti dare un'occhiata a http://pocoproject.org/ (POCO): offre un pò di tutto (thread,sockets,files,etc) come Boost, ma è una sola .dll grande solo 1 mb, quasi non usa metaprogramming, e personalmente mi sembra molto più sana di mente :D

Emalele1688
20-05-2011, 12:14
Ottime risposte da tutti e due:) Effettivamente l'uso di librerie esterne, come boost e POCO C++ implicano delle dipendenze aggiuntive, e nel mio caso l'uso della libpthread è ottimo...
Ma in caso di applicazioni Multithreading e multi piattaforma?? Boost da quel che so sono multi piattaforma...

ps: Un complimento a Tommo per avermi fatto conoscere POCO C++, sembra promettente, la devo solo sperimentare il Linux...

marco.r
20-05-2011, 13:59
Mah, se il futuro di C++ punta li, il mio punta da tutt'altra parte :D
Boost è troppo ingombrante per essere utile, e non mi piace per tutta una serie di altri motivi.

Comunque, potresti dare un'occhiata a http://pocoproject.org/ (POCO): offre un pò di tutto (thread,sockets,files,etc) come Boost, ma è una sola .dll grande solo 1 mb, quasi non usa metaprogramming, e personalmente mi sembra molto più sana di mente :D
Nel mio sistema libboost_thread.so e' grande 85 kb. Non ho presente in windows, ma non penso debba essere molto piu' grande.
Boost nel complesso e' grande, ma puoi linkare solo quello che ti serve.
E se ci sono parti troppo complesse e templatizzate (mi viene in mente la parte sui grafi) non sei obbligato ad usarle.
Il fatto che siano ampiamente usate poi da un minimo di garanzia in piu' riguardo la qualita' del codice.

cionci
21-05-2011, 10:03
Ma in caso di applicazioni Multithreading e multi piattaforma?? Boost da quel che so sono multi
Le Boost sono molti piattaforma, così come le QT. La libpthread ha una portabilità nettamente minore. Ad esempio su Windows va solo con porting del gcc, mentre le altre due funzionano tranquillamente anche su altri compilatori.