diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 1b403c2e..d5baaa9c 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -438,6 +438,7 @@ CPhoneDevice::CPhoneDevice(JavaVM* vm, jobject service, const std::string& appPa m_sensorsStatus = false; m_lastTime = 0; m_shouldStopWaiting = false; + m_collecting = false; RegisterHandlerForSignal(SIGUSR2); @@ -3508,7 +3509,20 @@ int CPhoneDevice::GetIceData(IDevice::ICE_INFO *iceInfo, IDevice::ICE_TAIL *iceT m_tempData.instantaneous_winddirection = 0xff; m_tempData.humidity = 0xff; - Collect_sensor_data(); //15s + std::unique_lock lock(m_collectDataLocker); + if (!m_collecting.load()) { + m_collecting.store(true); + m_CollectDatacv.notify_all(); + lock.unlock(); + Collect_sensor_data(); //15s + lock.lock(); + m_collecting.store(false); + m_CollectDatacv.notify_all(); + } else { + m_CollectDatacv.wait(lock, [this]{ return !m_collecting.load(); }); +// m_collecting.store(false); + } + Data_DEF airt; //++等值覆冰厚度, 综合悬挂载荷, 不均衡张力差 置0 iceInfo->equal_icethickness = 0xff; @@ -3629,7 +3643,19 @@ int CPhoneDevice::GetWData(IDevice::WEATHER_INFO *weatherInfo) m_tempData.humidity = 0xff; bool status = 1; - Collect_sensor_data(); //15s + std::unique_lock lock(m_collectDataLocker); + if (!m_collecting.load()) { + m_collecting.store(true); + m_CollectDatacv.notify_all(); + lock.unlock(); + Collect_sensor_data(); //15s + lock.lock(); + m_collecting.store(false); + m_CollectDatacv.notify_all(); + } else { + m_CollectDatacv.wait(lock, [this]{ return !m_collecting.load(); }); +// m_collecting.store(false); + } Data_DEF airt; { diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h index e6dee1e2..31458f3e 100644 --- a/app/src/main/cpp/PhoneDevice.h +++ b/app/src/main/cpp/PhoneDevice.h @@ -402,6 +402,10 @@ protected: IDevice::ICE_TAIL m_tempData; mutable std::mutex m_dataLocker; + mutable std::mutex m_collectDataLocker; + std::condition_variable m_CollectDatacv; + std::atomic m_collecting; + };