C++ 提高QTimer精度
我使用的是Qt4.7,并且有一个计时器,它可以根据需要的声音类型每秒执行2次或4次函数C++ 提高QTimer精度,c++,qt,C++,Qt,我使用的是Qt4.7,并且有一个计时器,它可以根据需要的声音类型每秒执行2次或4次函数 void Keypad::SoundRequest(bool allowBeeps, int beepType) { // Clear any Previous active Timer if (sound1Timer->isActive() == true) { sound1Timer->stop();
void Keypad::SoundRequest(bool allowBeeps, int beepType)
{
// Clear any Previous active Timer
if (sound1Timer->isActive() == true)
{
sound1Timer->stop();
}
else if(sound2Timer->isActive() == true)
{
sound2Timer->stop();
}
// Zero out main
(void) memset(&soundmain_t, (char) 0, sizeof(soundmain_t));
// Zero out sound1
(void) memset(&sound1_t, (char) 0, sizeof(sound1_t));
// Zero out the sound2
(void) memset(&sound2_t, (char) 0, sizeof(sound2_t));
if (allowBeeps == true)
{
if(beepType == OSBEEP)
{
sound1Timer->start(500); // 250mS On / 250mS off called every 500mS = 2HZ
}
else if (beepType == DOORBEEP)
{
sound2Timer->start(250); // 125mS On / 125mS off called every 250mS = 4HZ
}
}
else if (allowBeeps == false)
{
//Shut the Beeper Down
if (sound1Timer->isActive() == true)
{
sound1Timer->stop();
}
else if(sound2Timer->isActive() == true)
{
sound2Timer->stop();
}
SOUND_BLAST(0, &soundmain_t);
}
}
Constructor:
sound1Timer = new QTimer(this);
sound2Timer = new QTimer(this);
connect(sound1Timer, SIGNAL(timeout()), this, SLOT(sound1Handler()));
connect(sound2Timer, SIGNAL(timeout()), this, SLOT(sound2Handler()));
SLOTS:
void Keypad::sound1Handler()
{
// Sound a 250mS chirp
SOUND_BLAST(0, &sound1_t);
}
// Public SLOT, Called by sound2Timer()
// Sounds a single 125mS Beep
void Keypad::sound2Handler()
{
// Emit a Single 125mS chirp
SOUND_BLAST(0, &sound2_t);
}
计时器基本上是准确的,但并非一直都是2Hz或4Hz。为了提高精确度,我想使用一个更快的计时器,比如说25mS,让它运行,每次累积到250mS或125mS,然后发出嘟嘟声。然而,我不确定这是否会使它更准确
我是否应该使用QElapsedTimer()测量执行时间,并减去sound1Timer和sound2Timer间隔的开销?有更好的方法吗 计时器的精度受操作系统的限制。Qt库使用“隐藏”的操作系统计时器
如果你需要高精度,我会有一个定时器子程序,读取一个基于硬件的时钟,以建立事件的时间。您需要深入阅读操作系统文档以获得详细信息。计时器的准确性受操作系统的限制。Qt库使用“隐藏”的操作系统计时器
如果你需要高精度,我会有一个定时器子程序,读取一个基于硬件的时钟,以建立事件的时间。您需要深入阅读操作系统文档以获得详细信息。计时器的准确性受操作系统的限制。Qt库使用“隐藏”的操作系统计时器
如果你需要高精度,我会有一个定时器子程序,读取一个基于硬件的时钟,以建立事件的时间。您需要深入阅读操作系统文档以获得详细信息。计时器的准确性受操作系统的限制。Qt库使用“隐藏”的操作系统计时器
如果你需要高精度,我会有一个定时器子程序,读取一个基于硬件的时钟,以建立事件的时间。您需要深入操作系统文档以获得详细信息。这一点本身总是不准确的,因为其他(用户)事件正在主线程中处理并阻塞它。我会考虑使用另一个专用线程来做这个和其他方法来调度哔哔声(睡眠的某个变体)可能已经做了这个技巧。你是指工作者线程中的睡眠()吗?我不确定是否要引入另一个线程,但据我所知,声音线程只输出,根本不需要与主线程通信。因此,不应该有任何线程问题,如我可以告诉needed的信号量,这将始终是不准确的,因为其他(用户)事件正在主线程中处理并阻止它。我会考虑使用另一个专用线程来做这个和其他方法来调度哔哔声(睡眠的某个变体)可能已经做了这个技巧。你是指工作者线程中的睡眠()吗?我不确定是否要引入另一个线程,但据我所知,声音线程只输出,根本不需要与主线程通信。因此,不应该有任何线程问题,如我可以告诉needed的信号量,这将始终是不准确的,因为其他(用户)事件正在主线程中处理并阻止它。我会考虑使用另一个专用线程来做这个和其他方法来调度哔哔声(睡眠的某个变体)可能已经做了这个技巧。你是指工作者线程中的睡眠()吗?我不确定是否要引入另一个线程,但据我所知,声音线程只输出,根本不需要与主线程通信。因此,不应该有任何线程问题,如我可以告诉needed的信号量,这将始终是不准确的,因为其他(用户)事件正在主线程中处理并阻止它。我会考虑使用另一个专用线程来做这个和其他方法来调度哔哔声(睡眠的某个变体)可能已经做了这个技巧。你是指工作者线程中的睡眠()吗?我不确定是否要引入另一个线程,但据我所知,声音线程只输出,根本不需要与主线程通信。所以,正如我所知,不应该有任何像信号灯这样的线程问题