Qt基元类型,与QTimer和C++比赛
Qt primitive types, racing with QTimer, and C++
我在处理这段特定的代码时遇到了一些麻烦。它要么有比赛条件,要么有昆汀8的问题。
quint8 chunk3[CHUNK_SIZE_MULT];
memset(chunk3,0x00, sizeof(chunk3));
for (int cx = 0; cx < CHUNK_SIZE; cx++)
for (int cz = 0; cz < CHUNK_SIZE; cz++) {
int i = cx * CHUNK_SIZE + cz;
float abs[2];
abs[0] = x * CHUNK_SIZE + lastPosX + cx;
abs[1] = z * CHUNK_SIZE + lastPosZ + cz;
int perlin = (int)(wallsPerlin->Get(abs[0], abs[1])) % 8;
chunk3[i] = perlin > 6 ? perlin : 0;//(int)(sin(i) + 1.0 * 32.0);
}
如果我使用chunk3[I]=0或30或I%30,它将正常工作。然而,当我引入sin函数、rand函数或perlin噪声时,它会抛出抛出内存故障。我原以为这可能是从double到char的转换,但现在看来不太可能了。
有人能澄清一下这是与五分之一还是时间有关吗?
如果使用QTimer间隔来调用上述代码和OpenGL相关函数,QTimer是否有可能在没有完成前一个事件的情况下触发事件?
如果是这样的话,我如何用Qt更好地构建我的游戏循环?使用usleep?
编辑:我现在明白了,这不是时间问题,因为离开perlin并打印它,但将chunk3[I]设置为固定的30可以很好地工作。
编辑:将int转换为quint8似乎并不能解决问题。
quint8 perlin = (quint8)((int)(wallsPerlin->Get(abs[0], abs[1])) % 8 + 8);
修复它。
相关文章:
- 如何从其他类n个Qt C++调用QTimer?
- 如何完全停止QTimer
- QTimer 超时不会在单元测试中触发
- 使用 QTimer、QThread 和进度条
- 在C++中使用std或boost库的Qtimer等价物是什么
- QTimer::singleShot 仅在间隔为 0 时调用 lambda
- 如何在QtConcurrent::run中启动QTimer或为什么QVector<QTimer*>不起作用
- 何时使用多个函数调用和 QTimer 调用析构函数?
- 使用 std::bind 将 QTimer::singleShot 传递给 std::async
- QTimer isActive 返回 true,但 remainingTime 返回 -1
- 让 QtConcurrent 中的 QTimer 正常工作
- QTimer timeout()方法不再在代码重组后启动
- QTimer 在传递变量时不会启动
- 在插槽中停止QTIMER
- 使用 QTimer 对包含 5 张图像的幻灯片进行计时
- 另一个应用程序用 c++ 在 Windows 上的线程中破坏 QTimer
- QTimer 线程的方法 'isActive()' 是安全的吗?
- 识别哪种QTIMER的任何方法
- QTimer超时信号在每个超时事件中多次发射
- 删除如何适用于QTimer