关于timesetevent();

本文介绍了如何利用Windows API实现一个计时器,通过全局变量和字符输入控制数组的定时打印,包括开关功能和死循环设计,以满足实时通讯场景的需求。

  本人是当做计时器来使用,由于输入不能再回调里面写,网上关于它的资料有很少(例子都一样,基本道具是内个hello word ; time out),所以只能自己思考。我一开始是打算用函数来传值,但后来发现只要用全局变量就可以搞定。

  我的目标是输入一个数组,然后用定时器将他打印输出出来。同时我加了一个类似开关的功能。

#include <stdio.h>
#include <Windows.h>
#include <Mmsystem.h>
#include <iostream>
using namespace std;
//int buf[];
char buf[100];

#pragma comment(lib, "Winmm.lib")
void WINAPI onTimeFunc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dwl, DWORD dw2);
int main(int argc, char* argv[])
{
	while (true)
	{
		MMRESULT timer_id;
		//5. 与客户端通讯 发送
		while (true)
		{
			if ((getchar() == '+'))
			{
				timer_id = timeSetEvent(2000, 1, (LPTIMECALLBACK)onTimeFunc, (DWORD)NULL, TIME_PERIODIC);
				cin >> buf;
				break;
			}
		}
		while (true)
		{
			if (getchar() == '=')
			{
				timeKillEvent(timer_id);
				break;
			}
		}
	}
	return 0;
}
       
   

void WINAPI onTimeFunc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dwl, DWORD dw2)
{
     cout << buf<< endl;
}

  运用while(getchar()=='+'),这个语句的意思是,如果输入 + ,那么就可以执行下面的代码(个人理解)。我这里是把他当做if的条件,把调用放作为第一个if的函数体。也就是说如果不输入 + 的话,程序就不调用定时器,自然不会达到我们的功能,这就起到了开关启动的功能。

while (true)
		{
			if ((getchar() == '+'))
			{
				timer_id = timeSetEvent(2000, 1, (LPTIMECALLBACK)onTimeFunc, (DWORD)NULL, TIME_PERIODIC);
				cin >> buf;
				break;
			}
		}

  运用while(getchar()=='='),这个语句的意思是,如果输入 = ,那么就可以执行下面的代码(个人理解)。我这里还是把他当做if的条件,把调用放作为第二个if的函数体。也就是说如果不输入 = 的话,程序就不会杀死定时器,自然就一直的去输出(就是执行回调函数的函数体),这就起到了开关关闭的功能。

if (getchar() == '=')
			{
				timeKillEvent(timer_id);
				break;
			}

  这样就实现了开和关闭这个定时器。

  设置好开关剩下的就是了逻辑问题。我们这里肯定是需要循环的,而且还是死循环的的内种。为啥是死循环?这主要是看个人的需求:1.我做了关闭定时器的功能。2.你在玩qq或者微信亦或其他聊天软件的时候你不能说说一两句话没声了,不让发了。所以我做了死循环,用while(true)。达到目的后就用break跳出当前的循环。随后在外边再加一个大循环就搞定了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值