我必須做一個 C 代碼才能使用兩個 Qt 計時器:
- 一個作為鬧鐘,x秒后,呼叫ac函式alarm_finished()。
- 一個實作這一點:每秒,呼叫也在 ac 檔案中定義的回呼 on_1s_event 。
我知道我應該使用兩個計時器和 QTimer 類,但我不確定是否在兩個不同的類中定義這兩個計時器,我如何保證我的計時器在同一時間運行,一個沒有” t 等待另一個。非常感謝您在這件事上啟發了我!
uj5u.com熱心網友回復:
QTimer 不保證精確,但是如果您以秒的解析度進行測量,那么它對于正常使用來說非常好。
我怎么能保證我的計時器在同一時間運行,一個不等待另一個。
你沒有。如果alarm_finished運行需要幾秒鐘,則會有幾秒鐘on_1s_event不觸發。同樣,如果運行on_1s_event時間超過一秒鐘,您的系統將無法正常運行。
uj5u.com熱心網友回復:
僅供參考。我在一個測驗類中使用了兩個 QTimer。在第 10 個 1sec 任務中,它觸發了 10s 警報。
#define TWOTIMER_HPP
#include <QObject>
#include <QTimer>
#include <QDebug>
class MyTestObject: public QObject
{
Q_OBJECT
public:
MyTestObject(): timer_alarm(new QTimer()),
periodic_call(new QTimer())
{
periodic_call->setInterval(1000);
timer_alarm->setSingleShot(true);
timer_alarm->setInterval(10000);
connect(periodic_call, &QTimer::timeout, this, &MyTestObject::ProcessTask1s_event);
connect(timer_alarm, &QTimer::timeout, this, &MyTestObject::Invoke_Alarm);
timer_alarm->start();
periodic_call->start();
}
void ProcessTask1s_event()
{
qDebug() << "Process Task Ran ";
}
void Invoke_Alarm()
{
qDebug() << "Invoke Alarm Task Ran ";
}
private:
QTimer* timer_alarm;
QTimer* periodic_call;
};
#endif // TWOTIMER_HPP
uj5u.com熱心網友回復:
由于您提供了非常稀疏的資訊,因此我將保留此答案的通用性。
在您的主視窗中,您可以使用new QTimer(this)區域變數創建您的計時器(this在主視窗被破壞時將負責釋放它們)。
然后,您需要connect將 QTimer 實體的超時事件傳遞給您要呼叫的函式,例如:
connect(timer1, &QTimer::timeout, &someCFunction);
最后,您需要以start毫秒為單位的所需時間間隔的計時器。
有關更多詳細資訊,請參閱https://doc.qt.io/qt-5/qtimer.html上的檔案。
另請注意,Qt 使用“EventLoop”機制,這意味著您的函式將在與接收背景關系(即您的主回圈)相同的“執行緒背景關系”中執行。因此,您的事件可以“依次”執行,但絕不能“同時”執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/313890.html
