Gebruik threading en sockets in C op een platformonafhankelijke manier

Ik moet een programma schrijven dat gebruik maakt van threads en sockets. Wat is de beste manier om het voor verschillende platforms te doen (Linux, Windows, Mac).

Ik weet het van POSIX, maar er is geen POSIX op Win.

Zijn er bibliotheken die dat op een platformonafhankelijke manier afhandelen?

5
toegevoegd de auteur Kulti, de bron

6 antwoord

Als u echt C (niet C ++) wilt, dan raad ik aan om de standaard POSIX-threads op niet-Windows-platforms te gebruiken en pthreads-win32 op Windows. Het ondersteunt zowel 32- als 64-bit, zowel MSVC als MinGW. De huidige versie (2.9.1) is slechts een maand geleden uitgebracht, dus het project wordt actief onderhouden. Er is ook een fork on github met enkele oplossingen in het MSVC2010-project.

Als C ++ ook een optie is, zou ik boost kiezen, omdat hier de standaard c ++ evolueert (het ontwerp van std :: thread in c ++ 11 is een evolutie van boost :: thread , etc.)

Voor het netwerkgedeelte van uw vraag is boost :: asio de beste keuze als C ++ OK voor u is, anders niets vergelijkbaars in C. Met name boost :: asio ondersteunt I/O-voltooiingspoorten (IOCP) op Windows, wat essentieel is voor de prestaties. boost :: asio vereist enige tijd om te leren, maar naar mijn persoonlijke mening is het de moeite waard om elke minuut de documentatie te lezen (wat geweldig is) en met voorbeelden te werken.

5
toegevoegd

Je kunt proberen om Qt (C ++) als een omslag te gebruiken, het heeft platformonafhankelijke bibliotheken voor threading en netwerken; tenzij je project 100% C. moet zijn

1
toegevoegd

De nieuwe C-standaard, C11, wordt geleverd met draadsteun. AFAIK er zijn nog geen C11, maar er zijn implementaties (wikkels) van het inrijggedeelte. Op POSIX-systemen zou je mijn wrapper bovenaan kunnen gebruiken in P99 pthread, dit zou je Linux en Mac moeten geven. Op Windows-systemen is er ten minste de referentie-implementatie van Dinkumware die heeft geleid tot API zoals gedefinieerd in de standaard.

Het gebruik van C11 zou u een "toekomstbestendige" uniforme thread-API geven.

Voor sockets is mijn indruk dat de BSD-socketinterfaces ook relatief direct in windows worden weergegeven, maar ik heb geen ervaring met programmeren op dat platform.

1
toegevoegd

U kunt boost (C ++) gebruiken: asio - voor asin-chrome invoer, threads - voor platformonafhankelijke draadsnijden

1
toegevoegd
Hij zei C, niet C ++. Anders is boost prima.
toegevoegd de auteur Stefan Steiger, de bron
Sorry, mijn fout.
toegevoegd de auteur Eugene, de bron

There is a C++ class called XP threads on codeproject. http://www.codeproject.com/Articles/15983/Cross-Platform-Threads
You need to change the ifdef from mach to ifndef win32/64

I used it for my OpenArena aimbot, the tutorial includes the modified XP-Threads class: http://aimbots.net/tutorials/19992-audio-killspam.html

Het enige dat u hoeft te doen, is om het te "classificeren" voor gebruik in C.

You can see the end-result here, btw: :)
http://www.youtube.com/watch?v=nyJ8aM52ykE

0
toegevoegd

For Windows, you can use Win32's CreateThread API: http://msdn.microsoft.com/en-us/library/kdzttdcb(v=vs.71).aspx

0
toegevoegd