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

标签 c++ variables multithreading pointers parameters

我有三个类(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/

相关文章:

c++ - LookupAddressForName 做什么,为什么这么慢

c++ - 在 C++ 中创建多维数组棋盘的问题

java - 制作并发登录屏幕

Python:在另一个线程修改字典时迭代字典

c++ - C++中的字符串连接问题

c++ - makefile 以及针对 Linux 程序和 C++ 使用 eclipse

sql-server - 带有声明变量的 SQL Server charindex

variables - Racket:获取名称存储在另一个变量中的变量的值

由 2 个文件共享的 C++ 变量

java - UCP 和 Oracle 12 c 中的连接关闭问题