2012-06-24 10 views
5

Potrzebuję napisać program, który używa wątków i gniazd. Jaki jest najlepszy sposób na zrobienie tego na różnych platformach (Linux, Windows, Mac).Użyj wątków i gniazd w C w sposób niezależny od platformy

Wiem o POSIX, ale nie ma POSIX na Win.

Czy istnieją biblioteki, które obsługują to w sposób niezależny od platformy?

+3

[POSIX dla Windows] (http://en.wikipedia.org/wiki/POSIX#POSIX_for_Windows) – Kulti

Odpowiedz

5

Jeśli naprawdę chcesz C (nie C++), proponuję użyć standardowych wątków POSIX na platformach innych niż Windows i użyć pthreads-win32 w systemie Windows. Obsługuje zarówno 32-, jak i 64-bitowe, zarówno MSVC, jak i MinGW. Obecna wersja (2.9.1) została wydana zaledwie miesiąc temu, więc projekt jest aktywnie utrzymywany. Jest też fork on github z pewnymi poprawkami w projekcie MSVC2010.

Jeśli C++ jest również opcja, że ​​mogę wybrać impuls, bo to gdzie średnia C++ ewoluuje (projekt std::thread w C++ 11 jest ewolucją od boost::thread itp)

Dla sieci część twojego pytania, boost::asio to najlepszy wybór, jeśli C++ jest w porządku dla ciebie, inaczej nie widziałem niczego porównywalnego w C. W szczególności, boost::asio obsługuje I/O Completion Ports (IOCP) w systemie Windows, co ma krytyczne znaczenie dla wydajności. boost::asio wymaga trochę czasu, aby się uczyć, ale według mnie osobiście warte każdej minuty spędzonej na czytaniu dokumentacji (która jest świetna) i pracy z przykładami.

1

Możesz spróbować użyć Qt (C++) jako opakowania, ma wiele platform dla tworzenia wątków i sieci; chyba, że ​​projekt musi być w 100% C.

1

Można użyć impuls (C++): asio - dla wyjścia wejściowego asinchronous, threads - za niezależne od platformy gwintowania

+1

Powiedział C, nie C++. W przeciwnym razie doładowanie jest w porządku. –

+0

Przepraszam, mój błąd. – Eugene

0

Istnieje klasa C++ nazywa nici XP na Codeprojekcja. http://www.codeproject.com/Articles/15983/Cross-Platform-Threads
Trzeba zmienić ifdef od mach do IFNDEF Win32/64

użyłem go dla mojego OpenArena Aimbot, tutorial zawiera zmodyfikowaną klasę XP wątków: http://aimbots.net/tutorials/19992-audio-killspam.html

Wszystko, co musisz zrobić, jest de- „klasyfikowania” go do użytku w C

można zobaczyć końcowy wynik tutaj, btw: :)
http://www.youtube.com/watch?v=nyJ8aM52ykE

1

Nowy standard C, C11, jest wyposażony w obsługę gwintów. AFAIK nie ma tam jeszcze C11, ale istnieją implementacje (wrappery) wątku. W systemach POSIX możesz użyć mojego wrappera w P99 na górze na pthread, to powinno ci dać Linuxa i Maca. W systemach Windows istnieje co najmniej implementacja referencyjna z Dinkumware, która dała początek interfejsowi API zdefiniowanemu w standardzie.

Użycie C11 dałoby ci "zunifikowany wątek API" z przyszłą wersją.

W przypadku gniazd, mam wrażenie, że interfejsy gniazd BSD są dostarczane bezpośrednio w oknach, ale nie mam doświadczenia w programowaniu na tej platformie.

Powiązane problemy