c语言计时器,定时器

1、c语言计时器

2、c语言定时器

1. clock()函数

需要引用头文件 “time.h”

注:clock函数返回从开始这个程序到调用的 clock() 函数之间的CPU时钟计时单元(clock tick)数。返回值类型是 clock_t。其中 CLOCKS_PER_SEC 是一个常数,表示一秒钟有多少个时钟数。

#include<time.h>

  int main(){
       clock_t start, end; 
       start = clock();
  
       /*...
         需要计时的代码
     ...*/
 
      end = clock();
      printf("time=%f\n", (double)(end - start) / CLOCKS_PER_SEC);
      return 0;
 }    

2. 1time(), difftime() 函数

返回从1970年1月1日00:00:00到现在经过的秒数

注:建议使用 difftime() 来计算程序执行所花时间(更精确,单位:s

 #include<time.h>
  
  int main(){
      time_t start,end;
      start = time(NULL);
  
      /*...
          需要计时的代码
      ...*/
 
     end = time(NULL);
     printf("time = %ds\n", difftime(end, start));
     return 0;
 }

2.2 每隔10s打印

#include <stdio.h>
#include <time.h>
 
int main(int argc,char **argv)
{
        time_t timep;
        time(&timep);        //返回从1970-01-01 00:00:00到现在的秒数
 
        int last_time=timep;    //获取一开始的时间
        printf("开始时间是:%ds\n",last_time);
 
        while(1)        //死循环,直到t-last_time==10,进程才会结束
        {
                time_t t;
                time(&t);        //当前时间一直改变
 
                if(t-last_time==10)    //当t-last_time==10,即时间相较于一开始过了10s
                {
                        printf("现在时间是:%ds,已过10s,打印信息,结束进程\n",t);
                        return 0;
                }
                else
                {
                        continue;
                }
        }
 
        return 0;
}

3. gettimeoftoday() 函数

函数原型:int gettimeofday(struct timeval *tv, struct timezone *tz)

1.该函数是 Linux 系统专属函数,可以精确到微秒 (us);

2.其中参数tv是保存获取时间的结果类型,参数tz用于保存时区结果 (若不使用可以传入NULL)。

 #include<sys/time.h>
  
  int mian(){
      struct timeval start,end;
      gettimeofday(&start, NULL);
  
       /*...
          需要计时的代码
      ...*/
 
     gettimeofday(&end, NULL);
     long timeuse = 1000000*(end.tv_sec - start.tv_sec) + end.tv_usec-start.tv_usec;
     printf("time =%f 秒\n", timeuse/1000000)
     return 0;
 }    

2.c语言定时器

#include <stdio.h>
#include <windows.h>
void CALLBACK timer_handler(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
    printf("Timer expired!\n");
}
 
int main() {
    // 创建窗口,用于接收消息
    HWND hwnd = CreateWindow("STATIC", "", 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
 
    // 创建定时器,每隔2秒触发一次
    UINT_PTR timerId = SetTimer(hwnd, 1, 2000, timer_handler);
 
    // 等待消息循环结束
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    // 删除定时器
    KillTimer(hwnd, timerId);
 
    return 0;
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C语言中,可以使用计时器和信号处理函数来实现软件定时器的功能。以下是一个简单的软件定时器的实现示例: ```c #include <stdio.h> #include <signal.h> #include <unistd.h> void timer_handler(int signum) { // 定时器处理函数 printf("Timer expired.\n"); } void set_timer(int interval) { struct sigaction sa; struct itimerval timer; // 设置信号处理函数 sa.sa_handler = timer_handler; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sigaction(SIGALRM, &sa, NULL); // 设置计时器值 timer.it_value.tv_sec = interval / 1000; timer.it_value.tv_usec = (interval % 1000) * 1000; timer.it_interval.tv_sec = interval / 1000; timer.it_interval.tv_usec = (interval % 1000) * 1000; // 启动计时器 setitimer(ITIMER_REAL, &timer, NULL); } int main() { // 设置定时器间隔为1秒 set_timer(1000); while(1) { // 主程序执行任务 // ... sleep(1); // 阻塞1秒钟 } return 0; } ``` 在这个示例中,我们使用了Linux系统的计时器和信号处理函数来实现软件定时器的功能。在程序启动时,我们通过`set_timer`函数设置定时器间隔为1秒,并指定定时器处理函数为`timer_handler`。在每次定时器触发时,系统会自动调用`timer_handler`函数,并输出一条提示信息。 需要注意的是,在使用计时器时,需要使用`setitimer`函数设置计时器的值,并指定定时器类型为`ITIMER_REAL`。此外,由于计时器是以信号的形式触发的,因此需要使用信号处理函数来处理计时器触发事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值