qt - QApplication 事件循环中无法解释的时间偏移
问题描述
我目前正在使用一个实时预测卫星位置的程序。类似的东西。底层库使用系统时间作为输入。
time_t now(time(0));
当我使用 Qt Creator 在 C++ 控制台应用程序上运行该程序时,该程序可以准确预测卫星的实时位置。
问题是当我在一个成熟的 Qt Gui 应用程序中使用它时,主函数中有一个 QApplication 对象。在程序中,预测函数是由定时器事件函数周期性的。这样我每 2 秒更新一次位置。不幸的是,输出不匹配(在 GUI 上或在我打印时)。就像轨道传播器在计算卫星位置时使用不同的时间一样。
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(&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);
}
}
更令人困惑的是,当我运行调试器(Ubuntu 上的 GDB)时,程序运行良好。就好像 GDB 以某种方式设法“解决”了这个问题。这有道理吗?
解决方案
推荐阅读
- c# - 使用 Task 编写异步代码和使用 async await 编写异步代码之间的区别?
- python - Pyspark 数据帧写入 sql server 性能问题
- windows - Windows 快捷键 - ctrl shift end
- c# - 是否可以从 Azure 函数使用 Google Sheets API?
- ios - 为什么 editActionsForRowAt 返回很多图像而不是一张图像?
- powershell - 指定的路径、文件名或两者都太长 Powershell
- javascript - 多个意图的线性流不起作用
- mysql - MYSQL-我想在mysql数据库中添加一个名为“total_marks”的列
- javascript - 如何在javascript循环中交替定位前两个或三个元素
- c - 将 unsigned int 左移到 32 位,生成警告