2009-07-10 3 views
8

私は自分のアプリケーションをLinuxからWindowsに移植しています。私は、プラットフォーム間でアプリケーションを移植するという芸術にかなり新しいです。私が知る限り、WindowsはPOSIXスレッドの実装をネイティブにサポートしていません。これは本当ですか?私はWindows用のpthreadの実装(ラッパーや何か)について聞いたことがありますが、CreateMutexやWindowsで提供される他のAPIを使う方が良いでしょうか?誰かがpls。両方の世界のPROとCONと私を啓発する。移植のためのいくつかのヒントは、答えと共にうまくいくでしょう。ウィンドウの方が良いですか? pthreadsまたはCreateMutex?

ありがとうございます。

答えて

3

このコードの将来は何かを覚えておく必要があります。あなたは将来両方のプラットフォームで開発(およびリリース)を計画していますか?またはこれは片道港ですか?

プロジェクトを移植する際には、コードの実際の変更をできるだけ少なくすることが最善の方法です。あなたの場合は、これはpthreadの解決策と一緒に行くことを意味するでしょう。あなたがこれを片道港にしようと計画しているなら、ネイティブに行くことは決して痛くないと言われています。 :)

両方のストラテジーを十分に調べて、あなたが最も快適に感じるものを実装するには、しばらく時間がかかります。

7

pthreadsラッパーを持っているなら、pthreadsはEnterCriticalSectionなどを呼び出すつもりです。pthreadsラッパーがあれば、おそらくそれを使用してコードを変更する必要はありません

0

pthreadとWindowの両方のAPIをラップするライブラリを使用し、カバーの下に適切なものを使用するのはなぜですか?コードは両方のプラットフォームで同じままです。

C++にこのようなライブラリが不足しているわけではないので、Cバージョンがないとは思いません。

+0

APR(Apache Portable Runtime)はこれを行う素晴らしいクロスプラットフォームのCライブラリです。よくテストされており、むしろ人気があります。 – Clay

0

CRTを使用するWindows C/C++アプリケーションでは、新しいスレッドのCRTを適切に初期化するためにbeginthread/beginthreadexを呼び出す必要があります。

1

私がやるべき最初のことは、WindowsよりもLinuxではBoost Threadに移植することです。

+0

ブーストスレッドはPOSIXよりどうやって優れていますか? – puffadder

+0

次の標準ライブラリスレッドのベースとなるBoost Threadsは、クロスプラットフォームのC++でのスレッド処理に推奨される方法になります。 POSIXスレッドAPIとraw Win32スレッドAPIは、正確には簡単には交換できません。たとえば、条件変数はPOSIXでは使用できますが、すべてのWin32プラットフォームでは使用できません。たとえば、ライブラリ、POSIX/Win32ラッパーに依存する場合は、ライブラリの品質を知らないリスクがあり、多くの助けを得ることができない場合があります。一方で、あなたは問題に遭遇したときに多くの助けを見つけることが確実です。 –

+0

ありがとうございます。それは助けとなりました。それはCで利用可能ですか? – puffadder

5

これはうまく機能:http://sourceware.org/pthreads-win32/

は、これは、Windows用のpthreadsライブラリのポートです。

+0

私は2セントでスローします。これは、このライブラリでも非常に幸運でした。多くのセマフォ、待ち行列、およびtheadsを持つかなり複雑なアプリケーションは、VxWorksからPOSIXに移植され、最終的にWindowsに移植されました。 –

+0

このライブラリは素晴らしいです! – vy32

関連する問題