J'ai des problèmes avec la programmation Windows très basique, implémentant un simple système producteur/consommateur.Windows.h CONDITION_VARIABLE provoque une exception (C/C++)
Mon 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;
ma fonction init (RAN dans le thread principal)
VOID init() {
fb.stopRequested = FALSE;
fb.count = 0;
InitializeCriticalSection(fb.lock);
InitializeConditionVariable(fb.notEmpty);
InitializeConditionVariable(fb.notFull);
}
L'exception cause de la fonction init pour être jeté sur l'instruction InitializeConditionVariable, de type violation d'accès (ntdll. dll).
J'utilise Visual Studio 2017 et la compilation pour Windows x64
Merci
Vous avez d'affecter l'objet section critique. changez le verrou 'LPCRITICAL_SECTION;' à 'CRITICAL_SECTION lock;' et passez '& fb.lock' à' InitializeCriticalSection' –
* J'utilise Visual Studio 2017 * et ceci est étiqueté C++. Jetez un oeil à std :: vector au lieu de LPSTR, et std :: mutex, std :: condition_variable, std :: lock_guard et tous les autres goodies: http://en.cppreference.com/w/cpp/thread –
stijn
Système hongrois à la rescousse. Les noms de type commençant par P sont des pointeurs. Ces pointeurs ne pointent à rien. –