C语言定时完成任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言定时完成任务相关的知识,希望对你有一定的参考价值。

一个C语言的程序结构:定时完成某个任务,即到某个时间去做某件事情,如何使程序不混乱?显示如何定时做?请各位大侠帮帮忙~

使用定时器控件,当时间到每个固定时候就触发消息

如:c++builder中有timer控件,可以设置每一个固定时间执行一段代码(如每1秒钟),代码中判断该时间是否和计算机时间相同,相同就触发消息

也可以:用while(1)循环,循环中加入sleep(毫秒)函数。也可以固定时间执行一次
参考技术A // 创建时间:2010-8-5
// 创建人: sfmcatl
// 编译环境: vc6.0 + Win32 Console Application

#include "stdafx.h"
#include <time.h>
#include <windows.h>

/*************************
*
* 获取当前系统时间
*
*************************/
tm* getTime()

time_t now;
time(&now);
return localtime(&now);


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

bool bExit = false;
while (!bExit)

tm *pTime = getTime();
printf("Current time is %s",asctime(pTime)); //输出当前系统时间

if (pTime->tm_hour == 10 && pTime->tm_min == 8 ) //如果是10:08 分 就执行任务

printf("行动开始\r\n");

else

printf("等待命令\r\n");

Sleep(1000); // 暂停1秒

return 0;

C语言表驱动法在定时任务列表中的应用

击上方“嵌入式应用研究院”,选择“置顶/星标公众号

干货福利,第一时间送达!

在嵌入式软件开发中,如果存在硬件定时器不足以支撑软件运行的时候,软件定时器的实现就显得十分有必要了。函数指针可以用于定时任务列表的创建和使用。在这种情况下,对系统的输入是时间的流逝。许多项目无法证明使用实时操作系统的合理性。相反,所需要的只是以预定的时间间隔运行许多任务。这种处理非常简单,如下所示:

typedef struct

   int interval;      
   void (*proc)(void); 
 timer_task;

static const timer_task timer_handler_task[] = 

     INTERVAL_16_MSEC,  fnA , 
     INTERVAL_50_MSEC,  fnB , 
     INTERVAL_500_MSEC, fnC ,
    ...
     0, NULL 
;

extern volatile int tick;

void main(void)

    const timer_task *ptr;
    int time;
    while (1) 
    
       if (tick) 
       
            tick--;
            time = computeElapsedTime(tick);
            for (ptr = timer_handler_task; ptr->interval != 0; ptr++)
            
                if (!(time % ptr->interval))
                    (ptr->proc)(); 
            
       
    

在以上例子中,我们定义了自己的数据类型(timer_task),它仅由一个间隔和一个指向函数的指针组成。然后定义一个timer_task类型的结构体数组timer_handler_task,并使用将要调用的函数列表及其调用间隔对其进行初始化。在main函数中,我们有启动代码,它必须启用一个周期性的计时器中断,该中断以固定的间隔增加易失性变量tick。然后我们进入无限循环。

while循环中检查非零刻度值,递减刻度变量并计算自程序开始运行以来经过的时间。然后代码简单地遍历每个任务,查看是否已经执行到该任务的时间,如果是,则通过函数指针调用它。

如果你的项目仅包含两个或三个任务,那么应用这个方法就有点大材小用了。但是,如果你的项目有大量定时任务,或者将来可能需要添加其它的任务,那么这种方法是非常不错的。在这里我们要注意的是,一旦你有新的需求,你只需要修改timer_handler_task这个数组的内容就可以了,而主循环中的代码不必更改。

往期精彩

表驱动+状态机法AD传感器驱动检测框架

C语言表驱动法编程实践(精华帖,建议收藏并实践)

回调函数的注册机制为什么会在嵌入式固件开发中应用如此广泛?

手把手教你在STM32上实现OLED视频播放(很简单也很硬很肝!)

一些值得被定义为常用C语言头文件库的漂亮宏定义(值得收藏,以备使用参考)

觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

以上是关于C语言定时完成任务的主要内容,如果未能解决你的问题,请参考以下文章

C语言表驱动法在定时任务列表中的应用

C语言表驱动法在定时任务列表中的应用

怎么用C语言编定时器?

C语言 用定时器 模拟多线程

求教怎么在C语言中使用定时器

求一个C语言定时关机程序