web-dev-qa-db-ja.com

Unixのpthread.hをWindowsでコンパイルできますか?

プログラムをコンパイルしようとすると

#include <pthread.h>

その中で、私はエラーを受け取ります:

pthread.h: No such file or directory

これをWindows環境でコンパイルすることは可能ですか?

Vistaを最新のMinGWで使用しています。

UNIXバージョン3.5にMicrosoft Windowsサービスを使用したくないのは、これをUnix環境に移行する必要があるためです。

53
naspinski

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 を参照)。

47
user257111

@Ninefingersが述べたように、pthreadはUNIX専用です。 Posixのみ、本当に。

ただし、Microsoftにはpthreadを複製するライブラリがあります。

NIXバージョン3.5用Microsoft Windowsサービス

ライブラリのダウンロード

16
Randolpho

pthread.hはWindowsではありません。ただし、Windowsには CreateThread で始まるextensiveスレッド機能があります。

私のアドバイスは、別のシステムのAPIのレンズを通してWinAPIを見るのにとらわれないことです。これらのシステムはdifferentです。快適なLinuxバイクシートでWin32バイクに乗ることを主張するようなものです。まあ、座席が正しく収まらない可能性があり、場合によっては落ちるだけです。

スレッドは異なるシステムでほとんど同じように機能し、 ThreadPoolsmutexes があります。 pthreadsスレッドとWindowsスレッドの両方で作業したことから、Windowsスレッドはpthreadよりもかなり多くの機能を提供していると言えます。

別のAPIの学習は非常に簡単で、概念(ミューテックスなど)の観点から考え、MSDNでそれらの1つを作成する方法を調べます。

11
bobobobo

TDM-GCC 64xパッケージを選択するだけです。 (MinGWツールチェーンの32ビット版と64ビット版の両方が含まれ、きちんとしたインストーラーに含まれています。)さらに重要なことには、「winpthread」ライブラリーと呼ばれるものが含まれています。

これは、32ビットおよび64ビットの両方のpthread.hヘッダー、libwinpthread.alibwinpthread.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つは、このための最もよく知られた方法のようです。

お役に立てれば。

4
user2873330

私が思い出すように、Windows用のgnuツールチェーンには、mingwとcygwinの2つのディストリビューションがあります。

Cygwinの動作を期待しています-それを「標準」のPOSIX環境にするために多くの努力が払われました。

Mingwツールチェーンは、ランタイムにmsvcrt.dllを使用するため、おそらくmsvcrtの「スレッド」apiを公開します。 _ beginthread これは、<process.h>

3
Chris Becke