スレッドとソケットを使用するプログラムを作成する必要があります。さまざまなプラットフォーム (Linux、Windows、Mac) でこれを行う最善の方法は何ですか。
POSIX については知っていますが、Win には POSIX がありません。
プラットフォームに依存しない方法でそれを処理するライブラリはありますか?
スレッドとソケットを使用するプログラムを作成する必要があります。さまざまなプラットフォーム (Linux、Windows、Mac) でこれを行う最善の方法は何ですか。
POSIX については知っていますが、Win には POSIX がありません。
プラットフォームに依存しない方法でそれを処理するライブラリはありますか?
本当に C (C++ ではない) が必要な場合は、Windows 以外のプラットフォームでは標準の POSIX スレッドを使用し、Windows ではpthreads-win32を使用することをお勧めします。32 ビットと 64 ビットの両方、MSVC と MinGW の両方をサポートします。現在のバージョン (2.9.1) はちょうど 1 か月前にリリースされたため、プロジェクトは積極的に維持されています。MSVC2010 プロジェクトのいくつかの修正を含むgithub のフォークもあります。
C++ もオプションである場合、標準の c++ が進化する場所であるため、boost を選択します ( std::thread
c++11 の設計は からの進化boost::thread
などです)。
質問のネットワーク部分については、boost::asio
C++ が問題ない場合に最適な選択です。それ以外の場合は、C に匹敵するものは見られませんでした。特に、パフォーマンスにとって重要な Windows をboost::asio
サポートしています。学ぶには時間がかかりますが、私の個人的な意見では、ドキュメントを読んだり (これは素晴らしいことです)、例を使って作業したりする価値があります。I/O Completion Ports (IOCP)
boost::asio
Qt (C++) をラッパーとして使用してみることができます。これには、スレッド化とネットワーク化のためのクロスプラットフォーム ライブラリがあります。プロジェクトが 100% C でなければならない場合を除きます。
新しい C 標準である C11 には、スレッドのサポートが付属しています。私の知る限り、C11はまだありませんが、スレッド部分の実装(ラッパー)があります。POSIX システムでは、pthread 上でP99の私のラッパーを使用できます。これにより、Linux と Mac が提供されるはずです。Windows システムでは、標準で定義されている API を生み出した Dinkumware からの参照実装が少なくとも存在します。
C11 を使用すると、「将来性のある」統合スレッド API が得られます。
ソケットについては、Windows でも BSD ソケット インターフェイスが比較的直接的に提供されているというのが私の印象ですが、そのプラットフォームでのプログラミングの経験はありません。
codeproject には XP スレッドと呼ばれる C++ クラスがあります。
http://www.codeproject.com/Articles/15983/Cross-Platform-Threads
ifdef を mach から ifndef win32/64 に変更する必要があります
OpenArena のエイムボットに使用しました。チュートリアルには、修正された XP-Threads クラスが含まれています: http://aimbots.net/tutorials/19992-audio-killspam.html
必要なのは、C で使用するために「分類解除」することだけです。
ここで最終結果を見ることができます、ところで: :)
http://www.youtube.com/watch?v=nyJ8aM52ykE
Windows の場合、Win32 の CreateThread API を使用できます: http://msdn.microsoft.com/en-us/library/kdzttdcb(v=vs.71).aspx