У меня есть три класса:
class Rtss_Generator {
int mv_transfersize;
}
class Rtss_GenSine : Rtss_Generator
class Rtss_GenSineRpm : Rtss_GenSine
Rtss_GenSine создает поток в своем конструкторе, он запускается немедленно, а функция потока вне курса объявляется статической, ожидая начала вычисления события.
проблема: все переменные, к которым осуществляется доступ через указатель gen, равны 0, но это не дает сбоя. Кроме того, this-address в конструкторе и gen-pointer-address в потоке совпадают, поэтому указатель в порядке.
этот код создается и компилируется в Visual Studio 6.0 с пакетом обновления 2003
ОРИГИНАЛЬНЫЙ КОД
no thread
Rtss_GenSine::getNextData() {
//[CALCULATION]
//mv_transferSize is accessible and has ALWAYS value 1600 which is ok
}
НОВЫЙ КОД
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)
}
}