VC中定时器设置

本文简单介绍下VC中定时器设置。

首先,新建对话框应用程序,然后添加几个操作按钮。

定义相关变量

private:
	int m_nValue;

	DWORD m_dwTimeStarted;

	LARGE_INTEGER m_cupHZ;
	LARGE_INTEGER m_StartCount;

源文件

void CTimeCountDlg::OnTimer(UINT nIDEvent)
{
	UpdateData(TRUE);

	switch(nIDEvent)
	{
	case 1:
		{
			m_nValue+=1000;
			m_sValue1.Format("%d",m_nValue);
		}
		break;
	case 2:
		{
			double dbTime = 0;
			dbTime = (::GetTickCount() - m_dwTimeStarted)*1.0;
			m_sValue2.Format("%f",dbTime);
		}
		break;
	case 3:
		{
			double dbTime = 0;
			MSG msg;
			UINT LFactor = 1000;
			while(::GetTickCount() - m_dwTimeStarted < 3*LFactor)
			{
				if (PeekMessage(&msg,0,0,0,PM_REMOVE))
				{
					TranslateMessage(&msg);
					DispatchMessage(&msg);
				}
			}

			dbTime = (::GetTickCount() - m_dwTimeStarted)*1.0;
			m_sValue3.Format("%f",dbTime);
		}
		break;
	case 4:
		{
			UINT LFactor = 1000;
			double dbTimestamp = 0;
			LARGE_INTEGER CurCount;
			QueryPerformanceCounter(&CurCount);
			CurCount.QuadPart = CurCount.QuadPart - m_StartCount.QuadPart;
			dbTimestamp = double(CurCount.QuadPart)*LFactor;
			dbTimestamp = dbTimestamp/double(m_cupHZ.QuadPart);
			m_sValue4.Format("%f",dbTimestamp);
		}
		break;
	default:
		break;
	}

	UpdateData(FALSE);

	CDialog::OnTimer(nIDEvent);
}

void CTimeCountDlg::OnButton1()
{
	m_nValue = 0;
	SetTimer(1,1000,NULL);
	KillTimer(2);
	KillTimer(3);
	KillTimer(4);
}

void CTimeCountDlg::OnButton2()
{
	m_dwTimeStarted = ::GetTickCount();

	SetTimer(2,1000,NULL);
	KillTimer(1);
	KillTimer(3);
	KillTimer(4);
}

void CTimeCountDlg::OnButton3()
{
	m_dwTimeStarted = ::GetTickCount();

	SetTimer(3,1000,NULL);
	KillTimer(1);
	KillTimer(2);
	KillTimer(4);
}

void CTimeCountDlg::OnButton4()
{
	QueryPerformanceFrequency(&m_cupHZ);
	m_StartCount.QuadPart = 0;
	QueryPerformanceCounter(&m_StartCount);

	SetTimer(4,1000,NULL);
	KillTimer(1);
	KillTimer(2);
	KillTimer(3);
}

运行效果

总结:

按钮一:直接使用定时器操作

按钮二:获取操作系统运行时间,然后相减,立即开始

按钮三:获取操作系统运行时间,然后相减,*s内运行或者*s后开始

按钮四:查询定时器计数值

源码下载

时间: 2024-10-12 17:43:19

VC中定时器设置的相关文章

VC中CListCtrl设置滚动条在最下边的方法(MSDN中的例子)

当插入一条新的记录时同时设置: m_listReport.EnsureVisible(nColumn,FALSE);//设置滚动条到最下面 nColumn为当前记录条数 MSDN中: https://msdn.microsoft.com/zh-cn/library/tbtcxzsf.aspx // Ensure that the last item is visible. int nCount = m_myListCtrl.GetItemCount(); if (nCount > 0) m_my

VC++中的延时函数

原文链接:http://www.educity.cn/develop/478947.html VC中提供了很多关于时间操作的函数,编写程序时我们可以跟据定时的不同精度要求选择不同的时间函数来完成定时和计时操作. 方式一:VC中的WM_TIMER消息映射能进行简单的时间控制.首先调用函数SetTimer()设置定时 间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔.然后在应用程序中增加定时响应函数 OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间

VC++中开发汇编语言(转)

汇编程序结构 一个显示字符串的汇编程序 程序格式 一.模式定义 二.includelib语句 三.函数声明语句 四.数据和代码部分 Visual C/C++环境 建立工程 汇编程序的调试 一.设置断点 二.内存窗口 三.寄存器窗口 四.监视窗口 常用调试命令 字符串输入.输出 printf sprintf scanf 常用Windows API调用 MessageBox 确定函数的声明语句和库文件 读取CPU标识 WinDbg调试工具 实验题:用MessageBox函数显示CPU信息 源自:ht

深度解析VC中的消息传递机制

摘要:Windows编程和Dos编程,一个很大的区别就是,Windows编程是事件驱动,消息传递的.所以,要学好Windows编程,必须 对消息机制有一个清楚的认识,本文希望能够对消息的传递做一个全面的分析. 一.什么是消息? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定 义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变窗口尺寸.按下键盘上的一个键 都会使Windows发送一个

VC中LINK 2001 和 LINK 2009 的错误的解决

最近将两个开源C++项目编译成windows版本的时候遇到很多问题,关键是两个项目经过同事的修改之后,一个项目引用了另一个项目,两个项目的头文件中都有一些跨平台的关于数据类型,以及一些通用函数的定义,所以导致有冲突,编译的时候总是报错,报的最多的是“无法解析的外部符号”,经过近3天的折腾总算都通过了,这里是一些总结. 首先,关于VC中的lib,与linux下的静态库是不同的,在VC中编译动态库的时候会生成一个lib和一个对应的dll,使用者在使用的时候需要包含头文件以及连接到该lib,在发布最终

在VC中创建两套资源解决中英文版本发布的问题

原文http://blog.csdn.net/ylforever/article/details/6745611 一.背景 当软件需要发布多个不同语言版本时,对资源编辑的菜单,按钮,对话框大小形状有不同的要求.比如同个单词用中文/英文描述字符长度差异较大,如果这个单词 用作按钮的标题,对按钮的大小要求就不一样.这时可以有两种解决方法:1.通过代码动态调整按钮的大小,较麻烦,也破坏了VC资源编辑所见即所得规则. 2.准备两套资源,编译不同的版本用不同的资源.下面重点描述第二种处理方法的详细步骤.

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

【转载】VC中如何调用其他的可执行程序

在开发项目的时候,有的时候会分开来开发,分开的有时是exe文件,有的时候也会调用现成的工具包里面的一些exe文件,这样在项目里面就要通过调用exe文件来使用. 那么在C++里面直接调用exe文件的方法有哪些呢?现在可考虑的方法主要有: a.使用system函数 b.使用exec或者是execv函数 c.使用WinExec函数 d.使用CreateProcess函数 e.使用ShellExcecuteEx函数 1)上面的5中方法中,system函数,函数原型system(执行shell命令)定义函

vc中改变对话框的背景色

---- 笔者曾在<软件报>2000年第5期中讨论过如何改变控件的颜色,但还有相当一部分的读者来信提问:一个基于对话框的MFC AppWizard应用程序中,如何改变对话框的背景颜色呢?对于这个问题,其实可以由几种不同的方法来实现,具体如下(粗斜体代码为增添的): ---- 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现. ---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色.下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下: --