2009-07-10 10 views
8

Ich portiere meine Anwendung auf Windows von Linux. Ich bin ziemlich neu in der Kunst der Portierung von Anwendungen auf Plattformen. Soweit ich weiß, unterstützt Windows die POSIX-Thread-Implementierung nicht nativ. Ist das wahr? Ich habe von einigen Implementierungen von Pthreads für Windows (ein Wrapper oder etwas) gehört, wäre es besser, sie zu verwenden oder CreateMutex und andere APIs von Windows verwenden? Jemand pls. Erleuchte mich mit den PROs und CONs beider Welten. Einige verschiedene Tipps für die Portierung würden gut zusammen mit der Antwort gehen.Was ist besser für Windows? Pthreads oder CreateMutex?

Vielen Dank im Voraus.

Antwort

3

Eine Sache, die Sie beachten sollten, ist die Zukunft dieses Codes. Planen Sie, in Zukunft auf beiden Plattformen zu entwickeln (und zu veröffentlichen)? Oder ist das ein One-Way-Port?

Bei der Portierung eines Projekts ist es am besten, die tatsächlichen Änderungen am Code so minimal wie möglich zu halten. In Ihrem Fall würde dies bedeuten, mit einer Pthread-Lösung zu gehen. Davon abgesehen, wenn Sie planen, dass dies ein One-Way-Port sein wird, tut es nie weh. :)

Ich würde etwas Zeit nehmen, um beide Strategien gründlich zu untersuchen und dann die zu implementieren, mit der Sie sich am wohlsten fühlen.

7

Es wird alles dasselbe sein (pthreads wird nur EnterCriticalSection usw. aufrufen), wenn Sie also einen Pthreads-Wrapper haben, sollten Sie ihn wahrscheinlich verwenden, damit Sie nicht so viel Code ändern müssen

0

Warum nicht das Beste aus beiden Welten haben und eine Bibliothek verwenden, die sowohl Pthreads als auch Window's API umschließt und die passende unter den Covern verwendet? Ihr Code bleibt auf beiden Plattformen gleich.

Es gibt keinen Mangel an solchen Bibliotheken in C++, daher kann ich mir nicht vorstellen, dass es keine C-Versionen gibt.

+0

Die APR (Apache Portable Runtime) ist eine fantastische plattformübergreifende C-Bibliothek, die dies tut. Sehr empfehlenswert, da es gut getestet und, äh, ziemlich beliebt ist. – Clay

0

Auf Windows C/C++ - Anwendungen, die den CRT verwenden, müssen Sie beginthread/beginthreadex aufrufen, um den CRT im neuen Thread ordnungsgemäß zu initialisieren.

1

Das erste, was ich tun würde, ist, unter Linux auf Boost Thread zu portieren als auf Windows.

+0

Wie ist Boost Threads besser als POSIX? – puffadder

+0

In Zukunft werden Boost-Threads, auf denen die nächste Standardbibliothek-Thread-Basis basiert, die empfohlene Methode für Threading in plattformübergreifendem C++ sein. Die POSIX-Thread-API und die rohe Win32-Threading-API sind nicht einfach austauschbar. Bedingungsvariable ist beispielsweise in POSIX verfügbar, aber nicht auf allen Win32-Plattformen. Wenn Sie beispielsweise auf eine Bibliothek, einen POSIX/Win32-Wrapper, angewiesen sind, riskieren Sie, die Qualität der Bibliothek nicht zu kennen, und Sie werden möglicherweise nicht viel Hilfe bekommen. Boost auf der anderen Seite, Sie werden sicher eine Menge Hilfe finden, wenn Sie auf Probleme stoßen. –

+0

Danke. Das war eine Hilfe. Ist es für C verfügbar? – puffadder

5

das funktioniert gut: http://sourceware.org/pthreads-win32/

Es ist ein Hafen der Pthreads-Bibliothek für Windows.

+0

Ich werde meine 2 Cent einwerfen, dass wir sehr viel Glück mit dieser Bibliothek hatten. Eine ziemlich komplexe Anwendung mit vielen Semaphoren, Queues und Theads wurde von VxWorks nach POSIX und schließlich auf Windows portiert. –

+0

Diese Bibliothek ist großartig! – vy32

Verwandte Themen