gpt4 book ai didi

C++ this作为线程参数,变量不可用

转载 作者:太空狗 更新时间:2023-10-29 22:53:13 24 4
gpt4 key购买 nike

我有三个类(class):

class Rtss_Generator {
int mv_transfersize;
}
class Rtss_GenSine : Rtss_Generator
class Rtss_GenSineRpm : Rtss_GenSine

Rtss_GenSine 在他的构造函数中创建了一个线程,它被立即启动并且线程函数被声明为静态的,等待一个事件开始计算。

问题:通过gen-pointer访问的所有变量都是0,但是并没有失败。另外,构造函数中的this-address和线程中的gen-pointer-address是一样的,所以指针是可以的。

此代码是在 Visual Studio 6.0 Service Pack 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)
}
}

最佳答案

也许你正在做这样的事情:

Rtss_GenSize someFunc()
{
Rtss_GenSize temp;
return temp;
}

Rtss_GenSine mygensize = some_func();

在这种情况下,构造函数在一个临时实例上被调用一次,复制构造函数被调用以将其复制到 mygensize(两次),使得“this”对生成的线程没有好处。

这可能是问题所在...如果您发布创建 Rtss_GenSine 实例的代码将有助于调查...

关于C++ this作为线程参数,变量不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com