I ont trois classes:C++ cela comme paramètre fil, les variables non disponibles
class Rtss_Generator {
int mv_transfersize;
}
class Rtss_GenSine : Rtss_Generator
class Rtss_GenSineRpm : Rtss_GenSine
Rtss_GenSine crée un fil dans son constructer, on commence immédiatement et le ThreadFunction est hors cours déclarée statique, en attendant un événement commencer à calculer.
le problème: toutes les variables qui sont accessibles par le gen-pointeur sont 0, mais il ne manque pas. De plus, cette adresse dans le constructeur et l'adresse gen-pointer dans le thread sont les mêmes, donc le pointeur est ok.
ce code est créé et compiler dans Visual Studio 6.0 Service Pack 2003
CODE ORIGINAL
no thread
Rtss_GenSine::getNextData() {
//[CALCULATION]
//mv_transferSize is accessible and has ALWAYS value 1600 which is ok
}
CODE NOUVEAU
Rtss_GenSine::Rtss_GenSine() {
createThread(NULL, threadFunction, (LPVOID) this,0,0);
}
Rtss_GenSine::getNextData() {
SetEvent(startCalculating);
WaitForSingleObject(stoppedCalculaing, INFINITE);
}
DWORD Rtss_GenSine::threadFunction(LPVOID pParam) {
Rtss_GenSine* gen = (Rtss_GenSine*) pParam;
while(runThread) {
WaitForSingleObject(startCalculating, INFINITE);
ResetEvent(startCalculating)
//[CALCULATION]
//gen->mv_transferSize ---> it does not fail, but is always zero
//all variables accessed via the gen-pointer are 0
setEvent(stoppedCalculaing)
}
}
Je pense que vous devriez mettre à jour le compilateur, et il semble que votre routine "createThread" n'est pas celle de WinAPI. Voir la documentation CreateThread sur MSDN. – SigTerm