2009-07-10 11 views
8

Przesyłam moją aplikację do systemu Windows z Linuksa. Jestem całkiem nowy w dziedzinie portowania aplikacji na różnych platformach. O ile mi wiadomo, Windows natywnie nie wspiera implementacji wątków POSIX. Czy to prawda? Słyszałem o jakiejś implementacji pthreadów dla Windows (wrapper czy coś takiego), czy lepiej byłoby z nich skorzystać lub użyć CreateMutex i innych API dostarczanych przez windows ???? Ktoś pls. Oświeć mnie dzięki PRO i CONs obu światów. Kilka różnych wskazówek dotyczących przenoszenia ładnie pasuje wraz z odpowiedzią.Co jest lepsze w przypadku systemu Windows? pthreads lub CreateMutex?

Z góry dziękuję.

Odpowiedz

3

Jedną z rzeczy, o której należy pamiętać, jest przyszłość tego kodu. Czy planujesz rozwijać (i wypuszczać) na obu platformach w przyszłości? Czy jest to port w jedną stronę?

Najlepszą rzeczą do zrobienia podczas przenoszenia projektu jest utrzymanie minimalnych zmian w kodzie. W twoim przypadku oznaczałoby to skorzystanie z rozwiązania pthread. Biorąc to pod uwagę, jeśli planujesz, że jest to port jednokierunkowy, nigdy nie bój się rodowitości. :)

Zajmie mi to trochę czasu, aby w pełni zbadać obie warstwy, a następnie wdrożyć tę, z którą czujesz się najbardziej komfortowo.

7

To wszystko będzie takie samo (pthreads zadzwoni po prostu do EnterCriticalSection), więc jeśli masz paczkę Pthreads, powinieneś go używać, aby nie zmieniać tak dużej ilości kodu

0

Dlaczego nie mieć najlepszych z obu światów i korzystać z biblioteki, która otacza zarówno pthreads i Window's API i używa odpowiedniego pod okładkami? Twój kod pozostaje taki sam na obu platformach.

Nie ma niedoborów takich bibliotek w C++, więc nie wyobrażam sobie, że nie ma tam wersji C.

+0

APR (Apache Portable Runtime) to fantastyczna wieloplatformowa biblioteka C, która to robi. Wysoce zalecane, ponieważ jest dobrze przetestowane i, raczej popularne. – Clay

0

W aplikacjach Windows C/C++ korzystających z CRT należy wywołać beginthread/beginthreadex, aby poprawnie zainicjować CRT w nowym wątku.

1

Pierwszą rzeczą, którą zrobię, jest przeniesienie do wątku wzmocnienia w systemie Linux niż w systemie Windows.

+0

Jak więc zwiększyć wątki lepsze niż POSIX? – puffadder

+0

Idąc dalej, wątki doładowania, na których bazuje następny standardowy wątek biblioteki, będą zalecanym sposobem wykonywania wątków w wieloplatformowym C++. Interfejs API wątków POSIX i surowy interfejs Win32 threading API nie są łatwo wymienialne. Zmienna warunku, na przykład, jest dostępna w POSIX, ale nie na wszystkich platformach Win32. Jeśli masz polegać na bibliotece, na przykład na otokach POSIX/Win32, ryzykujesz niewiedzą o jakości biblioteki i możesz nie być w stanie uzyskać dużej pomocy. Z drugiej strony, z drugiej strony, na pewno znajdziesz dużo pomocy, gdy napotkasz problemy. –

+0

Dzięki. To była pomoc. Czy jest dostępny dla C? – puffadder

5

to działa dobrze: http://sourceware.org/pthreads-win32/

Jest to port biblioteki Pthreads dla Windows.

+0

Wrzucę moje 2 centy, że mieliśmy też szczęście z tą biblioteką. Dość złożoną aplikację z mnóstwem semaforów, kolejek i gadżetów przeniesiono z VxWorks na POSIX, a na końcu na Windows. –

+0

Ta biblioteka jest świetna! – vy32

Powiązane problemy