#qt #qt5
Вопрос:
В настоящее время я работаю с программой для прогнозирования местоположения спутников в режиме реального времени. Что-то похожее на это. Базовая библиотека использует системное время в качестве входных данных.
time_t now(time(0));
Эта программа точно предсказывает положение спутников в реальном времени, когда я запускаю ее в консольном приложении C с помощью Qt Creator.
Проблема заключается в том, что я использую его в полноценном графическом приложении Qt с объектом QApplication в основной функции. В программе функция прогнозирования периодически выполняется функцией события таймера. Таким образом, я обновляю позиции каждые 2 секунды. К сожалению, выходные данные не совпадают (ни в графическом интерфейсе, ни при печати). Это похоже на то, что орбитальный распространитель использует другое время при расчете положения спутников.
void TrackingManager::timerEvent(QTimerEvent *event)
{
int nNumSats = m_Satellites.size() ;
//std::cout << __func__ << " - Number of satellites = " << nNumSats << std::endl;
std::vector<SatPosition> vSatPositions;
if (nNumSats >= 0)
{
time_t now(time(0));
std::cout << __func__ << "time(0) = " << asctime(gmtime(amp;now)) << std::endl;
for(int i = 0; i < nNumSats; i )
{
// Get satellite names and calculate position, altitude etc
SatPosition spPos;
GetInstantPredict(m_Satellites[i], now, spPos);
vSatPositions.push_back(spPos);
}
emit UpdateSatPosition(vSatPositions);
}
}
Еще более запутанно то, что программа отлично работает, когда я запускаю отладчик (GDB в Ubuntu). Как будто GDB каким-то образом удается «исправить» проблему. Имеет ли это какой-то смысл?
Комментарии:
1. Ваш вопрос не совсем ясен. «Вывод не совпадает» — Вывод
time(0)
? С чем это должно совпадать?2. @JarMan Извиняется за путаницу. время(0) выводит правильное время. Это позиции спутников, которые отличаются, предполагая, что запуск распространителя с помощью QApplication каким-то образом портит внутренний расчет, который зависит от разницы между системным временем и временем базового орбитального распространителя. Что еще более запутанно, программа отлично работает с GDB.
3. Таким образом, какая-то другая функция, для которой вы не предоставляете исходный код, не дает вам ожидаемого результата, даже если ввод правильный? Я не уверен, как мы должны помочь вам с этим. И я не совсем понимаю, почему вы считаете, что виновником является QApplication.