6

Linux 用に書かれたプログラムの Windows バージョンを C++ で作成しようとしています。プログラムをスレッド セーフにするために、Linux バージョンではpthread_cond_tandを使用します。pthread_cond_waitこれらの関数はミューテックスを使用して、待機中のスレッドが実際に待機していることを確認します。

CONDITION_VARIABLEWindowsでうまくいくかもしれませんが、コンパイルできない理由がわかりません。私が知る限り、関連するすべてのヘッダーが含まれていても、「エラー: 'CONDITION_VARIABLE' は型に名前を付けていません」というエラーが表示されます。http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspxでコードをコピーして貼り付けてみましたが、どちらもコンパイルされません。私はGCCを使用しています。

これをコンパイルする方法についてのアイデアはありますか? または condition_variables を含まない代替アプローチはありますか?

4

4 に答える 4

4

前に_WIN32_WINNTandを定義しましたか?WINVER#include <windows.h>

これは、以降のバージョンの Windows でのみ追加されたものの定義を含めるために必要です。条件変数については、少なくとも0x0600条件変数が V6 (つまり、Vista/2008) で新しくなったように、これらを設定する必要があります。

http://msdn.microsoft.com/en-us/library/aa383745%28VS.85%29.aspxを参照してください。

于 2011-07-29T10:57:31.480 に答える
2

最新の Windows ヘッダーがあること、およびWinBase.hに次の行があることを確認します。

typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;

そしてもちろん、_WIN32_WINNT少なくとも に #defined があります0x600

于 2011-07-30T13:18:19.700 に答える
0

スレッド化にpthreadライブラリを使用しているとのことですが。pthreadを使用する場合のWindowsでのmutexの使用に関するこの記事を調べましたか。

于 2011-07-29T11:03:18.603 に答える
-1

Windows で POSIX スレッド API を実装するpthreads-win32の使用を検討してください。これには条件変数が含まれます。

于 2011-07-30T14:15:17.120 に答える