Необъяснимое смещение по времени в цикле событий QApplication

#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.