Что произойдет, если у меня несколько перекрывающихся QTimer

Предположим, у меня есть 2 QTimer объекты с интервалами 10, 20. И предположим, я хочу бежать slot1() с таймером 1 timeout сигнал и slot2 с таймером 2. Так работает порядок slot1 а также slot2 это что-то вроде этого:

10ms-----20ms-----------30ms----40ms-----  
(slot1) (slot1, slot2) (slot1) (slot1, slot2)...  

Я хочу знать через 20 миллисекунд, какой из slot1 & slot2 выполняет сначала? и как я могу заставить цикл событий работать slot2 а потом slot1 когда они перекрываются.(slot2 мне важнее бежать вовремя)

1 ответ

Решение

Нет гарантии, что слоты в двух таймерах будут вызываться с конкретными заказами. Это потому, что вы запускаете их в разное время, а также QTimer в лучшем случае имеет точность в миллисекунды, установив это:

timer.setTimerType(Qt::PreciseTimer);

По умолчанию Qt::CoarseTimer что обеспечивает точность в пределах 5% от желаемого интервала.

О вашем случае, если вы хотите позвонить slot2 а также slot1 чтобы вы могли вызвать их в слоте, подключенном к таймеру с интервалом 10:

void myClass::onTriggered()
{
    if(count % 2==0)
        slot2();
    slot1();

    count++;
}
Другие вопросы по тегам