プログラムをコンパイルしようとすると
#include <pthread.h>
その中で、私はエラーを受け取ります:
pthread.h: No such file or directory
これをWindows環境でコンパイルすることは可能ですか?
Vistaを最新のMinGWで使用しています。
UNIXバージョン3.5にMicrosoft Windowsサービスを使用したくないのは、これをUnix環境に移行する必要があるためです。
pthread.h
は、スレッド用のUnix/Linux(POSIX)APIのヘッダーです。 CygwinなどのPOSIXレイヤーは、おそらく#include <pthreads.h>
でアプリをコンパイルします。
ネイティブのWindowsスレッド化APIは#include <windows.h>
を介して公開され、Linuxのスレッド化とはわずかに異なる動作をします。
それでも、 http://sourceware.org/pthreads-win32/ で維持されている代替の「グルー」ライブラリがあります。 MinGW/VSと若干の非互換性があることに注意してください(例: here を参照)。
@Ninefingersが述べたように、pthreadはUNIX専用です。 Posixのみ、本当に。
ただし、Microsoftにはpthreadを複製するライブラリがあります。
pthread.h
はWindowsではありません。ただし、Windowsには CreateThread で始まるextensiveスレッド機能があります。
私のアドバイスは、別のシステムのAPIのレンズを通してWinAPIを見るのにとらわれないことです。これらのシステムはdifferentです。快適なLinuxバイクシートでWin32バイクに乗ることを主張するようなものです。まあ、座席が正しく収まらない可能性があり、場合によっては落ちるだけです。
スレッドは異なるシステムでほとんど同じように機能し、 ThreadPools と mutexes があります。 pthreads
スレッドとWindowsスレッドの両方で作業したことから、Windowsスレッドはpthread
よりもかなり多くの機能を提供していると言えます。
別のAPIの学習は非常に簡単で、概念(ミューテックスなど)の観点から考え、MSDNでそれらの1つを作成する方法を調べます。
TDM-GCC 64xパッケージを選択するだけです。 (MinGWツールチェーンの32ビット版と64ビット版の両方が含まれ、きちんとしたインストーラーに含まれています。)さらに重要なことには、「winpthread」ライブラリーと呼ばれるものが含まれています。
これは、32ビットおよび64ビットの両方のpthread.h
ヘッダー、libwinpthread.a
、libwinpthread.dll.a
静的ライブラリ、および必要な.dll libwinpthread-1.dll
およびlibwinpthread_64-1.dll
(これは、2016年1月6日現在)。
ビルド中にlibwinpthread.a
ライブラリにリンクする必要があります。それ以外は、LinuxのネイティブPthreadコードと同じコードにすることができます。私はこれまでのところ、Windows上でいくつかの基本的なPthreadプログラムを64ビットでコンパイルするのに成功しています。
または、WindowsスレッドAPIをpthread APIにラップする次のライブラリを使用できます。 pthreads-win32 。
上記の2つは、このための最もよく知られた方法のようです。
お役に立てれば。
私が思い出すように、Windows用のgnuツールチェーンには、mingwとcygwinの2つのディストリビューションがあります。
Cygwinの動作を期待しています-それを「標準」のPOSIX環境にするために多くの努力が払われました。
Mingwツールチェーンは、ランタイムにmsvcrt.dllを使用するため、おそらくmsvcrtの「スレッド」apiを公開します。 _ beginthread これは、<process.h>