2009-07-10 13 views
8

Sto trasferendo la mia applicazione a Windows da Linux. Sono abbastanza nuovo per l'arte di trasferire applicazioni su piattaforme diverse. Per quanto ne so, Windows non supporta in modo nativo l'implementazione dei thread POSIX. È vero? Ho sentito parlare di alcune implementazioni di pthread per Windows (un wrapper o qualcosa del genere), sarebbe meglio usarle o usare CreateMutex e altre API fornite da windows ???? Qualcuno, per favore. illuminami con i PRO e i CON di entrambi i mondi. Alcuni consigli vari per il porting andrebbero bene insieme alla risposta.Quale è meglio per Windows? pthreads o CreateMutex?

Grazie in anticipo.

risposta

3

Una cosa che devi tenere a mente è qual è il futuro di questo codice. Avete intenzione di sviluppare (e rilasciare) su entrambe le piattaforme in futuro? O è una porta a senso unico?

La cosa migliore da fare quando si porta un progetto è di mantenere le modifiche effettive al codice il più minimale possibile. Nel tuo caso, questo significherebbe andare con una soluzione pthread. Detto questo, se stai programmando che questo sia un porto a senso unico, andare nativo non fa mai male. :)

Vorrei un po 'di tempo per esaminare completamente entrambe le stratigrafie e quindi implementare quello con cui ti senti più a tuo agio.

7

Sarà tutto lo stesso (pthreads chiamerà EnterCriticalSection ecc.), Quindi se hai un wrapper pthreads, dovresti probabilmente usarlo in modo da non dover cambiare tanto codice

0

Perché non avere il meglio di entrambi i mondi e utilizzare una libreria che avvolge entrambi i pthread e l'API di Windows e utilizza quella appropriata sotto le copertine? Il tuo codice rimane lo stesso su entrambe le piattaforme.

Non c'è carenza di tali librerie in C++ quindi non riesco a immaginare che non ci siano versioni C circa.

+0

L'APR (Apache Portable Runtime) è una fantastica libreria C multipiattaforma che fa questo. Altamente raccomandato in quanto è ben testato e, um, piuttosto popolare. – Clay

0

Nelle applicazioni Windows C/C++ che utilizzano il CRT è necessario chiamare beginthread/beginthreadex per inizializzare correttamente il CRT nel nuovo thread.

1

La prima cosa che farei è eseguire il porting su Boost Thread su Linux anziché su Windows.

+0

Quindi, in che modo i thread Boost sono migliori di POSIX? – puffadder

+0

In futuro, Boost Threads, su cui sarà basata la successiva base di thread della libreria standard, sarà il modo consigliato per eseguire il threading in C++ multipiattaforma. API thread POSIX e API threading raw Win32 non sono esattamente intercambiabili. La variabile di condizione, ad esempio, è disponibile in POSIX ma non su tutte le piattaforme Win32. Se hai intenzione di fare affidamento su una libreria, un wrapper POSIX/Win32, ad esempio, corri il rischio di non conoscere la qualità della libreria e potresti non essere in grado di ottenere molto aiuto. D'altro canto, sei sicuro di trovare molto aiuto quando ti imbatti in problemi. –

+0

Grazie. È stato un aiuto È disponibile per C? – puffadder

5

questo funziona bene: http://sourceware.org/pthreads-win32/

è un porto della libreria pthread per Windows.

+0

I'll throw in my 2 cents che abbiamo avuto molto fortuna con questa libreria pure. Un'applicazione abbastanza complessa con molti semafori, code e thead è stata trasferita da VxWorks a POSIX e infine su Windows con questo. –

+0

Questa libreria è fantastica! – vy32

Problemi correlati