SetTimer如何修改间隔时钟uElapse

43 篇文章 15 订阅
订阅专栏
3 篇文章 0 订阅
订阅专栏

在进行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函数的总结
不定期更新的博客
04-02 2054
关于SetTimer函数的总结 在使用 SOUI 编写Windows程序时,似乎曾经看到过 SOUI 中限制了 SetTimer 函数能启动的定时器的个数,于是今天就去 MSDN 看了下Windows本身是否也限制了单个程序能启动的定时器个数,于是就有了这篇总结。 先下结论好了:微软在 MSDN 上并没有写明单个程序能启动的定时器的个数。 但是,还是学到了不少关于使用 SetTimer 函数时之前...
SetTimer随外部情况更改定时时间间隔响应OnTimer的问题
xxwssll的博客
10-18 663
今天写一个程序,有如下需求: 一个外部条件,需要定时去查看一下,根据这个外部条件的不同状况,定时的时间间隔是不一样的;那么,使用SetTimer怎么来改变定时的时间间隔呢? 我们知道,SetTimer(1,1000,NULL);这个语句执行后,系统就每隔1秒执行1次ontimer,这个时间间隔是不变的;并且SetTimer函数执行完后,就不会再循环回来再次执行SetTimer,是单向的,不是循环的...
QT通过点击按钮改变定时器时间间隔
m0_58264778的博客
06-08 2039
.cpp文件 #include "widget.h" #include "ui_widget.h" #include <QTimer> #include <QDebug> int timer_out; int A,B,C,D; Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); A=100; B=1.
QT定时器QTimer
轻舞飞扬
06-26 2577
原文链接:http://blog.163.com/bingcaihuang@126/blog/static/198942122010103104026183/ 2010-11-03 10:40:26|  分类: QT |  标签:定时器  qtimer  qobject  触发  timerevent  |字号 订阅 在Qt中使用定时器有两种方法,一种是
Windows毫秒精度定时器SetTimer
gdizcm的专栏
09-21 1417
#include<iostream> #include <Windows.h> using namespace std; UINT id1, id2; /* hWnd: 窗口句柄 nMsg: 消息,这里是WM_TIMER nTimerid: 定时器id dwTime:当前系统时间,指从开机到现在所经过的毫秒数 */ void CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nTimerid, DWORD dwTime) { ...
QtTestSetTimer.zip
12-07
这里我们将基于`QTimer`探讨如何修改间隔时钟`uElapse`,以及`QTimer`的相关用法。 `QTimer`的构造函数允许我们创建一个新的定时器对象,而设置定时器的间隔通常通过`start()`或`singleShot()`方法完成。例如,我们...
GDI 基础 计时器应用
09-29
UINT uElapse, // 定时器间隔,以毫秒为单位 void (CALLBACK* lpfnTimer)(HWND, UINT, WPARAM, LPARAM) // 回调函数指针 ); ``` 1. `hWnd`参数:指定接收计时器消息的窗口的句柄。 2. `nIDEvent`参数:为计时器...
MFC 使用计时器
bmjhappy的专栏
06-22 3363
转载:http://blog.sina.com.cn/s/blog_7656589b0101g30h.html 最简单的开始写,毫秒级时钟。 用CWnd::SetTimer设置定时器,然后在窗口上添加WM_TIMER事件,接下来实现OnTimer响应函数就可以了... SetTimer(1,1,NULL); // 第一个是定时器标号,第二个是每隔多长时间运行一次,单位毫秒,第三个本来是定时器处理函数的,这里用NULL的意思是直接使用OnTimer响应函数... void OnTimer( UIN
MFC中定时器的使用
徐富元
03-23 1099
在MFC中和定时器相关的有三个函数: UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD) ); afx_msg void OnTimer( UINT nIDEvent ); BOOL KillTimer( int nIDEvent );
windows中的定时器
eskimoer的专栏
09-16 1920
关于定时器主要用三种用法: 首先看定时器的函数 UINT_PTR SetTimer(HWND hwnd,UINT_PTR nIDEvent, UINT uElaspse,TIMERPROC lpTimerFunc); 参数: hwnd:毫无疑问,就是指的哪个窗口设置定时器 nIDEvent:就是定时器的标号,标识这个定时器和其他的定时器的区别 uElapse:定时器每触发一次的时间间隔,在wind
定时器:SetTimer
GoJawee的博客
06-05 680
注:把编辑框属性设置为“只读” 什么时候我们需要用到SetTimer函数呢?当你需要“每个一段时间”执行一件事的的时候就需要使用SetTimer函数了。使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。 1.1 用WM_TIMER来设置定时器 先请看Set
QT中的定时器
qq_38378235的博客
08-06 1249
在编写代码时,经常会遇到需要间隔某一时间触发一次时间或者间隔某一时间在执行某段代码,QT中提供了Timer类可用于设置时间间隔。 简述 QTimer类提供了重复和单次触发信号的定时器。 QTimer类为定时器提供了一个高级别的编程接口。很容易使用:首先,创建一个QTimer,连接timeout()信号到适当的槽函数,并调用start(),然后在恒定的时间间隔会发射timeout()信号。 ...
QTQTimer详解以及结合多线程中开启定时器的示例
ligare的博客
01-27 2万+
QTimer详解 QTimer类提供了重复和单次触发信号的定时器。 a.void timeout ()定时器超时后,这个信号被发射。 b.void start()开启定时器,它的重载函数void start(int msec),启动或重新启动一个超时时间间隔为毫秒的定时器。 如果定时器正在运行,它将被停止和重新启动。 c.void stop()停止定时器. d.void setInterval(int msec)设置超时间隔(毫秒为单位)。 示例: QTimer *timer = new QT
Visual C++——定时器(计时器)SetTimer函数
无限迭代中......
04-03 8808
基本概念 SetTimer函数用于创建一个计时器 KillTimer函数用于销毁一个计时器。 计时器属于系统资源,使用完应及时销毁。 API SetTimer的函数原型: UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ); 其中 hWnd是...
QT】定时器事件 - QTimerEvent & QTimer
最新发布
YoungMLet的博客
07-22 2683
qt 系统定时器 --- QTimerEvent (描述⼀个定时器事件)、QTimer (实现⼀个定时器)、QDateTime (通过和QTimer一起使用获取系统的日期及实时时间)
WindowsSetTimer定时器编程
SSS_369
04-14 4699
摘要: 什么时候我们需要用到SetTimer函数呢? 当你需要每隔一段时间执行一件事的的时候就需要使用SetTimer函数。使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。 Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontim...
Windows API一日一练(67)SetTimer和KillTimer函数
anjichan4261的博客
11-07 393
在前面介绍了一对定时器的API函数使用,现在又介绍另外一对API函数的使用。它使用起来比前的函数要简单一些,但它一般是使用到有窗口的程序里,并且它的精度也没有前面的API函数高,对于一些要求不高的场合还是非常合适的。它是采用消息通知的方式,每当定时到了就会收到一条消息。 函数SetTimer和KillTimer声明如下: WINAPI SetTimer( __...
C++中的定时器-SetTimer
热门推荐
bmjhappy的专栏
03-19 3万+
先请看SetTimer这个API函数的原型 [cpp] view plain copy  print?    [cpp] view plain copy  print?    [cpp] view plain copy  print? UINT_PT
响应WM_TIMER实现定时器功能
Jaster_wisdom的专栏
08-28 2010
所谓定时器,就是每隔一段时间程序自动执行某段程序。在这里,使用setTimer函数创建一个定时器,killTimer函数销毁一个定时器,自定义回调函数TimerProc,它是CALLBACK类型。 下面说一下各个函数的原型: UINT_PTR SetTimer( //启动定时器 HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMER
写文章

热门文章

  • std::map 如何插入键值对 45928
  • Qt学习之QListWidget删除Item 32803
  • Qt(QLabel)实现滚动字幕 30714
  • UE4 显示帧率的几种姿势 27224
  • UE4实现纹理缩放(将纹理坐标进行缩放) 23192

分类专栏

  • DirectX XAudio2 付费 39篇
  • Windows开发 3篇
  • Qt学习和实战 37篇
  • Unreal Engine 4 15篇
  • OSG 5篇
  • OpenGL/GLSL 3篇
  • JNI 1篇
  • 刷题 1篇
  • Qt 43篇
  • UE4 15篇
  • C++ 12篇
  • OpenGL/GLSL 4篇
  • OSG 5篇
  • VS 4篇
  • 音频相关 6篇
  • 搜索引擎 1篇
  • 网站技术 1篇
  • boost 2篇
  • 字体处理 17篇
  • Uniscribe 2篇
  • NVPath 1篇

最新评论

  • UE4 显示帧率的几种姿势

    阿木呀: 那需要在蓝图内进行编辑,在你需要的特定条件下,用整数1整除GetWorldDeltaSeconds(游戏中刷新每帧的时间),得出的结果打印出来即可

  • Qt学习之QListWidget添加Item

    2301_80059307: 输入没有显示addItem咋回事,也有头文件

  • QPushButton下拉式菜单(是否取消下拉三角,是否check)

    六号跑道01: 稍微补充一下: QMenu* m_menu = new QMenu(this); QAction* m_addAction = new QAction(m_menu); QAction* m_delAction = new QAction(m_menu); m_addAction->setText(QObject::tr("添加")); m_delAction->setText(QObject::tr("删除")); m_addAction->setCheckable(true);//是否可以check m_delAction->setCheckable(true);//是否可以check m_menu->addAction(m_addAction); m_menu->addAction(m_delAction); connect(m_addAction, &QAction::triggered, this, &MainWindow::addFunc); connect(m_delAction, &QAction::triggered, this, &MainWindow::delFunc); QPushButton* m_pushButton = new QPushButton(this); m_pushButton->setText(QObject::tr("测试按钮菜单")); m_pushButton->setMenu(m_menu);//设置菜单 //m_pushButton->setStyleSheet("QPushButton::menu-indicator{image:none;}");//不显示下拉图片[code=cpp] [/code]

  • Qt学习之给QPushButton添加菜单ActionsContextMenu方法

    六号跑道01: 没实现,不知道我错在哪里表情包

  • UE4打包后运行exe黑屏

    一然明月: 一个编辑器开始地图 一个游戏默认地图 你看看你的游戏默认地图也设置了吗

大家在看

  • 论文 Python 实现WOA-CNN-BiGRU-Attention数据分类预测 64
  • 手环押金原路退回系统——足浴店——东方仙盟

最新文章

  • Windows API遍历桌面上所有文件
  • QT常见面试题,基础知识偏多
  • Console无界面程序如何使用SetTimer
2023年1篇
2021年4篇
2020年4篇
2019年1篇
2018年1篇
2017年26篇
2016年94篇
2015年14篇
2014年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenArrowMan

请打钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家陕西多彩玻璃钢雕塑销售电话武汉玻璃钢家具雕塑辽宁省玻璃钢人物雕塑玻璃钢花盆厂家直营的玻璃钢花盆花器资讯温州玻璃钢花盆供应玻璃钢动物雕塑厂家直销商场美陈六面气球墙商场玻璃钢花盆研发公司玻璃钢雕塑固定资产类别湘潭玻璃钢座椅雕塑玉溪市玻璃钢雕塑价钱柳州卡通玻璃钢雕塑生产厂家供销玻璃钢抽象雕塑蒙自市玻璃钢雕塑设计公司玻璃钢小雕塑多少钱一个水泥直塑工程玻璃钢雕塑石家庄玻璃钢动物雕塑报价河南玻璃钢雕塑摆件市场报价辽宁商场创意商业美陈传播荔湾玻璃钢人物雕塑在线下单金华公园玻璃钢雕塑销售电话玻璃钢艺术雕塑定做厂家天水玻璃钢植物雕塑定做承德玻璃钢广场雕塑定制镇江玻璃钢雕塑制作佛山玻璃钢主题雕塑制作厂玻璃钢金属雕塑厂家曲阳玻璃钢艺术雕塑厂家郑州铜玻璃钢彩绘雕塑定做香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化