• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > vc6.0中c语言控制台程序中的定时技术(定时器)

vc6.0中c语言控制台程序中的定时技术(定时器)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言编译器vc6.0下载,c语言编程软件vc6.0,c语言软件下载vc6.0,c语言vc6.0官方下载,c语言vc6.0使用教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

打开main.c编译运行,注意,打开main.c之后一定要将win32timer.c也加进工程中一起编译,下面有图。
在开发单片机、ARM以及Linux系统的程序时,因为硬件定时中断的存在我们很方便构造出定时ISR,然而在VC6.0中,我们如何写一个定时程序呢?
其实,就是timeSetEvent()这个函数的调用。这个函数的解释见MSDN。详细原理,请看我代码中的注释,我写得很详细了。

main.c

void myISR_Called_Per_1000ms(void);

int main(void)
{
 /* 每1000ms调用一次myISR_Called_Per_1000ms */
 UserTimerSet ( 1000, myISR_Called_Per_1000ms ) ;

 while (cnt<10);

 return 0; 
}

void myISR_Called_Per_1000ms(void)
{ 
 printf("The Program has run %ds\n",cnt++);
}
</div>

win32timer.h


//=======================
// win32timer.h
//=======================
#ifndef __WIN32TIMER_H__
#define __WIN32TIMER_H__

void UserTimerSet ( unsigned int uDelay, void (*UserFun)(void) ) ;

#endif  // @ #ifndef __WIN32TIMER_H__
</div>

win32timer.c

#include <windows.h>
#include "win32timer.h"

#pragma comment(lib,"winmm.lib") //导入winmm.lib多媒体库

/* 全局变量 */
HANDLE mainhandle;     //主线程句柄
CONTEXT Context;     //主线程切换上下文
static void (*TimerCallFun)(void);  //声明用户调用函数指针

/* 函数声明 */
static void __stdcall TimerISR(unsigned int uTimerID, unsigned int uMsg, unsigned long dwUser, unsigned long dw1, unsigned long dw2);

//======================================================================================
// 函数功能:用户需要调用的定时器设置(初始化)函数
// 入口参数:uDelay:定时器定时时长,单位为ms
//     void (*UserFun)(void):指向用户函数 void fun (void) 的函数指针
// 返 回 值:无
//======================================================================================
void UserTimerSet ( unsigned int uDelay, void (*UserFun)(void) )
{
 HANDLE cp,ct;

 TimerCallFun = UserFun;     //得到用户被定时调用的函数的函数指针
 Context.ContextFlags = CONTEXT_CONTROL;
 cp = GetCurrentProcess(); //得到当前进程句柄
 ct = GetCurrentThread(); //得到当前线程伪句柄
 DuplicateHandle( cp, ct, cp, &mainhandle, 0, TRUE, 2 ); //伪句柄转换,得到线程真句柄

 /*模拟设置定时器中断,开启一个定时器线程*/
 timeSetEvent( uDelay, 0, TimerISR, 0, TIME_PERIODIC );
 /*如果需要取消定时器,则可以调用timeKillEvent()函数,详见MSDN*/
}

//======================================================================================
// 函数功能:timeSetEvent需要定时调用的函数
// 入口参数:unsigned int uTimerID, unsigned int uMsg, unsigned long dwUser, unsigned long dw1, unsigned long dw2,详见MSDN
// 返 回 值:无
//======================================================================================
static void __stdcall TimerISR(unsigned int uTimerID, unsigned int uMsg, unsigned long dwUser, unsigned long dw1, unsigned long dw2)
{
 SuspendThread(mainhandle); //中止主线程的运行,模拟中断产生.但没有保存寄存器
 GetThreadContext(mainhandle, &Context); //得到主线程上下文,为切换任务做准备
 //===========================================================================================
 (*TimerCallFun)();    //或者TimerCallFun(); ———— 用户自定义实现的中断调用
 //===========================================================================================
 ResumeThread(mainhandle); //模拟中断返回,主线程得以继续执行
}
</div>

工程图

运行结果

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • vc6.0中c语言控制台程序中的定时技术(定时器)

相关文章

  • 2017-05-28DSP中浮点转定点运算--定点数模拟浮点数运算及常见的策略
  • 2017-05-28Cocos2d-x UI开发之CCControlSlider控件类使用实例
  • 2017-05-28c++传递函数指针和bind的示例
  • 2017-05-28使用设计模式中的单例模式来实现C++的boost库
  • 2017-05-28标准CSV格式的介绍和分析以及解析算法实例详解
  • 2017-05-28VC小技巧汇总之控件技巧
  • 2017-05-28冒泡排序的三种实现方法
  • 2017-05-28VC使用编译时间作为版本号标识的方法
  • 2017-09-12求一个n阶方阵对角线元素之和。
  • 2017-05-28详解C语言中const关键字的用法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 使用C语言求N的阶乘的方法
    • Cocos2d-x中实现弹出对话框示例
    • 关于"引用"的几点说明介绍
    • c++ 判断奇数偶数实例介绍
    • 解析wprintf 中使用%I64d格式化输出LONGLONG的详细介绍
    • 利用C++实现从std::string类型到bool型的转换
    • C++中引用&与取地址&的区别分析
    • 用C语言判断字符是否为空白字符或特殊字符的方法
    • c++ std::invalid_argument应用
    • C语言二维数组的处理实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有