我在使用非常基本的Windows編程時遇到了麻煩,實現了一個簡單的生產者/消費者系統。Windows.h CONDITION_VARIABLE導致異常(C/C++)
我的結構:
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;
我的初始化函數(在主線程運行)
VOID init() {
fb.stopRequested = FALSE;
fb.count = 0;
InitializeCriticalSection(fb.lock);
InitializeConditionVariable(fb.notEmpty);
InitializeConditionVariable(fb.notFull);
}
初始化函數導致異常要對InitializeConditionVariable指令拋出,類型訪問衝突(NTDLL。 DLL)。
我使用Visual Studio 2017年和編譯對於Windows x64
感謝
您必須分配臨界區對象。將'LPCRITICAL_SECTION鎖;'改爲'CRITICAL_SECTION鎖;'並將'&fb.lock'傳遞給'InitializeCriticalSection' –
*我正在使用Visual Studio 2017 *,並將其標記爲C++。看看std :: vector而不是LPSTR,而std :: mutex,std :: condition_variable,std :: lock_guard和所有其他好東西:http://en.cppreference.com/w/cpp/thread –
stijn
匈牙利系統的救援。以P開頭的類型名稱是指針。這些指針並不指向任何東西。 –