LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 987|回复: 2

贴个我写的一个定时器

[复制链接]
发表于 2008-4-12 23:39:29 | 显示全部楼层 |阅读模式
#include <time.h>
#include <stdio.h>
void settimer(char* starttime)
{
        char tmp[30];
        time_t now;
        struct tm *timenow;
        int year,month,day,hour,min,sec;
        char mon[3],d[3],h[3],m[3],s[3];
        while(1)
        {
                time(&now);
                timenow = localtime(&now);
                  year = timenow->tm_year + 1900;
                month = timenow->tm_mon + 1;
                day = timenow->tm_mday;
                hour = timenow->tm_hour;
                min = timenow->tm_min;
                sec = timenow->tm_sec;
                if(month < 10)
                        sprintf(mon,"0%d",month);
                else
                        sprintf(mon,"%d",month);
                if(day < 10)
                        sprintf(d,"0%d",day);
                else
                        sprintf(d,"%d",day);
                if(hour < 10)
                        sprintf(h,"0%d",hour);
                else
                        sprintf(h,"%d",hour);
                if(min < 10)
                        sprintf(m,"0%d",min);
                else
                        sprintf(m,"%d",min);
                if(sec < 10)
                        sprintf(s,"0%d",sec);
                else
                        sprintf(s,"%d",sec);
                sprintf(tmp,"%d-%s-%s %s:%s:%s",year,mon,d,h,m,s);
                if(!strcmp(tmp,starttime))
                {
                        printf("Start...........\n");
                        break;
                }
                printf("Now Time--------%s\n",tmp);
                printf("Start Time------%s\n",starttime);
                sleep(1);
        }
}
发表于 2008-4-14 16:44:06 | 显示全部楼层
应该用时间比较!

1.while里头不用作那么多的转换工作。
2.用字符串比较,万一时间过头了就不执行了,在某些情况下,不能保证sleep(1)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-21 15:51:06 | 显示全部楼层
这是修改了一下的,呵呵:
#include <stdio.h>
#include <time.h>


time_t ch_to_time(char* time)
{
        struct tm tm;
        time_t then;
        int year = 0;
        int mon  = 0;
        int day  = 0;
        int hour = 0;
        int min  = 0;
        int sec  = 0;
        int i    = 0;
        while(time != '-')
        {
                year = year * 10 + (time - '0');
                i++;
        }
        i++;
        while(time != '-')
        {
                mon = mon * 10 + (time - '0');
                i++;
        }
        i++;
        while(time != ' ')
        {
                day = day * 10 + (time - '0');
                i++;
        }
        i++;
        while(time != ':')
        {
                hour = hour * 10 + (time - '0');
                i++;
        }
        i++;
        while(time != ':')
        {
                min = min * 10 + (time - '0');
                i++;
        }
        i++;
        while(time)
        {
                sec = sec * 10 + (time - '0');
                i++;
        }
       
        tm.tm_year = year;
        tm.tm_mon  = mon;
        tm.tm_mday = day;
        tm.tm_hour = hour;
        tm.tm_min  = min;
        tm.tm_sec  = sec;

        tm.tm_year -= 1900;
        tm.tm_mon--;
        tm.tm_isdst = -1;
        then = mktime(&tm);
       
        return then;
}
int set_timer(char* starttime)
{
        time_t start;
        time_t now;
        start = ch_to_time(starttime);
        time(&now);
        while(1)
        {
                if(start < now)
                        return -1;
                if(now >= start)
                        break;
                sleep(1);
                time(&now);
        }
        return 0;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表