MFC,win32,linux C中SetTimer定时器用法

MFC,win32,linux C中SetTimer定时器用法

一. MFC中SetTimer用法

参照http://blog.csdn.net/shaopengf/article/details/38147089


二. win32中SetTimer用法

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

void Resp_fun();
int main()
{
 DWORD dwTimerId;  
 dwTimerId=SetTimer(NULL,1,1000,NULL);//1000:1秒;NULL:这里没有回调函数,是按照时间到后去响应一个自定义的函数Resp_fun()。
 MSG msg; 
 while(GetMessage(&msg, NULL, 0, 0))
{
   if(取消定时条件)
   {
    KillTimer(NULL, dwTimerId);
    dwTimerId=SetTimer(NULL,1,1000,NULL);    
   }else if(msg.message == WM_TIMER)
   {
    Resp_fun();
   }
}
 return 0;
}
 
void Resp_fun()
{   
    prinft("定时一次");        
}


三. linux C中SetTimer用法
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));
which为定时器类型,3中类型定时器如下:
ITIMER_REAL : 以系统真实的时间来计算,它送出SIGALRM信号。  
ITIMER_VIRTUAL : -以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。  
ITIMER_PROF : 以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号。
第二个参数指定间隔时间,第三个参数用来返回上一次定时器的间隔时间,如果不关心该值可设为NULL。
#include <signal.h>        //signal()
#include <string.h>        //memset()
#include <sys/time.h>    //struct itimerval, setitimer()

void Resp_fun(int signo);
int main()
{
   struct itimerval tick;     
   signal(SIGALRM, Resp_fun);
   memset(&tick, 0, sizeof(tick));
   if(定时条件) 
   {       
      //Timeout to run first time        
      tick.it_value.tv_sec = 10;       
      tick.it_value.tv_usec = 0;       
     //After first, the Interval time for clock       
      tick.it_interval.tv_sec = 10;
      tick.it_interval.tv_usec = 0;      
      if(setitimer(ITIMER_REAL, &tick, NULL) < 0)//set      
   }
   if(取消定时条件)
   {      
      //Timeout to run first time;        
      tick.it_value.tv_sec = 0;        
      tick.it_value.tv_usec = 0;       
     //After first, the Interval time for clock        
      tick.it_interval.tv_sec = 0;
      tick.it_interval.tv_usec = 0;        
      if(setitimer(ITIMER_REAL, &tick, NULL) < 0) 
   }
  return 0; 
}
void Resp_fun(int signo)
{
   printf("定时10秒");
}
it_interval指定间隔时间,it_value指定初始定时时间。
如果只指定it_value,就是实现一次定时;
如果同时指定 it_interval,则超时后,系统会重新初始化it_value为it_interval,实现重复定时;
两者都清零,则会清除定时器。  

发布了35 篇原创文章 · 获赞 17 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/shaopengf/article/details/53168646