私は非常に基本的なWindowsプログラミングに問題があり、単純なプロデューサ/コンシューマシステムを実装しています。Windows.h CONDITION_VARIABLEは例外(C/C++)を発生させます
私のstruct:
typedef struct FILE_BUFFER { //Circular buffer of max size BUF_SIZE
INT count; //buffer size
LPTSTR buf[BUF_SIZE]; //actual buffer of file names
BOOL stopRequested; //Exit flag
LPCRITICAL_SECTION lock; //Synch stuff
PCONDITION_VARIABLE notEmpty;
PCONDITION_VARIABLE notFull;
}FILE_BUFFER;
FILE_BUFFER fb;
私のinit関数は、init関数の原因の例外は型アクセス違反(NTDLLで、InitializeConditionVariable命令にスローされるように
VOID init() {
fb.stopRequested = FALSE;
fb.count = 0;
InitializeCriticalSection(fb.lock);
InitializeConditionVariable(fb.notEmpty);
InitializeConditionVariable(fb.notFull);
}
を(メインスレッドで実行されていました)。 dll)。
私は、Visual Studio 2017を使用していますし、あなたがInitializeCriticalSection
とInitializeConditionVariable
にパラメータとして初期化されていないポインタを渡しているのWindows x64のため
おかげ
あなたはクリティカルセクションオブジェクトを割り当てる必要があります。 'LPCRITICAL_SECTION lock;'を 'CRITICAL_SECTION lock;'に変更し、 '&fb.lock'を' InitializeCriticalSection'に渡します。 –
*私はVisual Studio 2017 *を使用しています。 LPSTRの代わりにstd :: vectorを見て、std :: mutex、std :: condition_variable、std :: lock_guardおよびその他すべての機能をお試しください:http://en.cppreference.com/w/cpp/thread –
stijn
システムハンガリー語を救助する。 Pで始まる型名はポインタです。これらのポインタは何も指していません。 –