C ++变量值"自己"在包含多线程的程序中

时间:2017-02-10 07:36:24

标签: c++

我很困惑,因为一个变量(燃料)正在变成0和#34;它确实不是真的,因为计算机不是神奇的生物。但是,我一直检查变量的使用,并没有出现任何奇怪的现象。但是,当它是,它从一个线程到另一个线程。以下是代码的一部分:

主要

dataCollectorFTL dataCollector1;
...
expertModule expertModule1(dataCollector1, gazeCoordinate1, communicationModule1);

在expertModule .h:

public:

dataCollectorFTL& theDataCollector;
communicationModule& theCommunicationModule;

...

std::chrono::steady_clock::time_point lastRefresh;
bool isFighting;
int previousEnemyHull;
long fuel;

...

expertModule::expertModule(dataCollectorFTL &aDataCollectorFTL, gazeCoordinate &aGazeCoordinate, communicationModule &aCommunicationModule);

然后,在expertModule.cpp中:

expertModule::expertModule(dataCollectorFTL &aDataCollectorFTL, gazeCoordinate &aGazeCoordinate, communicationModule &aCommunicationModule) : theDataCollector(aDataCollectorFTL) , theGazeCoordinate(aGazeCoordinate) , theCommunicationModule(aCommunicationModule) {

    isFighting = false;
    lastRefresh = std::chrono::steady_clock::now();
    fuel = theDataCollector.dataFuel;

}

...

if (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now()-lastRefresh).count()>500){

    if (isFighting && ( expertModule::fuel =! theDataCollector.dataFuel || theDataCollector.dataEnemyHull == 0)){
        isFighting = false;
        previousEnemyHull = theDataCollector.dataEnemyHull;
    } else if (!isFighting && theDataCollector.dataEnemyHull != previousEnemyHull ) {
        isFighting = true;      
        expertModule::fuel = theDataCollector.dataFuel;
    }


    std::cout<<expertModule::fuel<<std::endl;
    std::cout<<theDataCollector.dataFuel<<std::endl;        
    lastRefresh = std::chrono::steady_clock::now();
}

使用此代码,expertModule变量&#34; fuel&#34;值得初始化时的确切值,然后在DataCollector.dataFuel没有变化的情况下变为0。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我只能给你建议如何调试它。一个也可以改进设计的选项是将变量设为私有,并引入一个setter setFuel。在每次调用setter时,您都可以打印变量或包含断言。我想你可以用这种方式很快找到错误。