-1
我非常困惑,因爲一個變量(燃料)變成0「自己」,我敢肯定這不是真的,因爲電腦不是神奇的生物。但是,我一直檢查變量的使用情況,並沒有出現任何奇怪的現象。但是,當它是從一個線程到另一個線程。下面是一些一塊代碼:包含多線程的程序中的C++變量值「自身」
在主
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變量 「燃料」 值得初始化時的精確值,然後進入爲0而DataCollector.dataFuel不更改。
謝謝你的幫助
歡迎來到Stack Overflow。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –
這聽起來像一個調試器的工作(也許是valgrind) – Jonas
一個常見的混淆之處是,你在某處(如在構造函數中)創建數據的副本,並且所有更新都會轉到副本。然後令人驚訝的是,原文沒有改變。只是一個猜測。 –