SetTimer如何修改间隔时钟uElapse

Posted GreenArrowMan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SetTimer如何修改间隔时钟uElapse相关的知识,希望对你有一定的参考价值。

在进行Windows程序开发时,经常会用到Windows的API,SetTimer是Windows API中提供的定时器,在C++开发中使用起来还是比较方便的。

这篇文章主要介绍下修改SetTimer的间隔时钟的方法:在SetTimer时给定时钟3s触发一次,如果我们现在想修改为间隔2s触发一次,该如何做呢?

我用QT做了一个简单的例子,去实现了一个简单的demo,界面上有个按钮,点击按钮可以切换SetTimer的间隔时间。

运行结果如下:

 主要思路是:

调用SetTimer的时候会返回一个TimerID,修改SetTimer的使用TimerID就可以了。

头文件QtTestSetTimer.h:

#pragma once

#include <QtWidgets/QWidget>
#include <QtWidgets/QPushButton>

class QtTestSetTimer : public QWidget

    Q_OBJECT

public:
    QtTestSetTimer(QWidget *parent = Q_NULLPTR);
	~QtTestSetTimer();

protected:
	void slotChangeTimer(bool bClick);

protected:
	QPushButton *m_pChangeTimer = nullptr;
;

QtTestSetTimer.cpp:

#include "QtTestSetTimer.h"
#include <QDebug>
#include <windows.h>
#include <QDateTime>

UINT_PTR g_TimerID = 0;

void __stdcall TimerProc(HWND hwnd, UINT message, UINT_PTR iTimerID, DWORD dwTime)

	qDebug() << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");


QtTestSetTimer::QtTestSetTimer(QWidget *parent)
    : QWidget(parent)

	m_pChangeTimer = new QPushButton(this);
	m_pChangeTimer->setText("3s");
	m_pChangeTimer->setCheckable(true);
	connect(m_pChangeTimer, &QPushButton::clicked, this, &QtTestSetTimer::slotChangeTimer);

	g_TimerID = ::SetTimer(NULL, 0, 3000, TimerProc);
	qDebug() << "Now Timeout 3s:";


QtTestSetTimer::~QtTestSetTimer()

	::KillTimer(NULL, g_TimerID);
	g_TimerID = 0;


void QtTestSetTimer::slotChangeTimer(bool bClick)

	if (bClick)
	
		m_pChangeTimer->setText("2s");
		::SetTimer(NULL, g_TimerID, 2000, TimerProc);
		qDebug() << "Now Timeout 2s:";
	
	else
	
		m_pChangeTimer->setText("3s");
		::SetTimer(NULL, g_TimerID, 3000, TimerProc);
		qDebug() << "Now Timeout 3s:";
	

main.cpp:

#include "QtTestSetTimer.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    QtTestSetTimer w;
    w.show();
    return a.exec();

源码下载,源码与上述代码一致(收费):QtTestSetTimer.zip-C++文档类资源-CSDN下载

以上是关于SetTimer如何修改间隔时钟uElapse的主要内容,如果未能解决你的问题,请参考以下文章

SetTimer如何修改间隔时钟uElapse

SetTimer如何修改间隔时钟uElapse

SetTimer如何修改间隔时钟uElapse

SetTimer API函数

一个时钟

关于SetTimer间隔小于OmTimer执行时间的问题