#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/time.h>
#include<signal.h>
#include<string.h> #define BUFMAX 1024 static void alarm_handler(int s); static int init_mod;
static struct sigaction oldact;
typedef void (*anytm_t)(void *s);
typedef struct myalarm{
int sec;
anytm_t anytm;
//void (*anytm_t)(void *s);
char * arg;
}tim_t;
static tim_t *buf[BUFMAX] = {}; //关闭闹钟
static void buf_break(void)
{
struct itimerval itv;
sigaction(SIGALRM,&oldact,NULL);
itv.it_interval.tv_sec = ;
itv.it_interval.tv_usec = ;
itv.it_value.tv_sec = ;
itv.it_value.tv_usec = ;
setitimer(ITIMER_REAL,&itv,NULL);
init_mod = ;
} static void func(void *s)
{
printf("%s",(char *)s);
fflush(NULL); } static void alarm_init(void)
{
struct itimerval itv;
itv.it_interval.tv_sec = ;
itv.it_interval.tv_usec = ;
itv.it_value.tv_sec = ;
itv.it_value.tv_usec = ; struct sigaction act;
act.sa_handler = alarm_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = ; setitimer(ITIMER_REAL,&itv,NULL);
sigaction(SIGALRM,&act,&oldact);
init_mod = ; }
static void alarm_handler(int s)
{
for(int i = ;i < ;i++)
{
if(buf[i] != NULL)
{
buf[i]->sec--;
if(buf[i]->sec == )
{
buf[i]->anytm(buf[i]->arg);
free(buf[i]);
buf[i] = NULL;
}
}
}
} static int time_init(int n,anytm_t anytm,void *p)
{
tim_t *t = NULL;
int i;
if(==init_mod)
alarm_init();
t = malloc(sizeof(tim_t) + strlen(p));
if(t == NULL)
return -; for(int i = ;i < BUFMAX;i++)
{
if(buf[i] == NULL)
{
break;
}
}
t->sec = n;
t->anytm = anytm;
strcpy(t->arg,(char *)p);
buf[i] = t;
return i; } void anytime_destroy(void)
{
buf_break();
for(int i = ;i < ;i++)
{
if(buf[i] != NULL)
{
free(buf[i]);
buf[i] = NULL;
}
}
} int main(void)
{
int i = ; time_init(,func,"hello");
time_init(,func,"world");
time_init(,func,"uplooking"); while()
{
write(,"*",);
sleep();
i++;
if(i == )
anytime_destroy(); } exit();
}

anytime的更多相关文章

  1. Linux udhcp client (udhcpc) get IP at anytime

    /*************************************************************************************** * Linux udh ...

  2. Anytime项目开发记录0

    Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...

  3. Anytime项目开发记录4

    做事情列表,我在程序中命名为“正在做”. 这是一个Fragment,应用的主页面,由一个MainActivity加上DoingListFragment和PersonFragment组成.PersonF ...

  4. Anytime项目开发记录3

    应用想要做的好,反馈必然少不了~哈哈~ 用户的反馈.意见.建议,甚至是谩骂,都是对项目的反馈. 如果一个应用没有听取用户的反馈,那么应用会离着用户越来越远.懂得用户要什么是一回事,听得到用户的反馈,则 ...

  5. Anytime项目开发记录2

    注册,登陆于密码找回.这是这次记录的主要内容. 首先,我们来看类图: 因为一直在改,所以与第二篇介绍项目框架时的图会有一些不一样. 代码都是非常简单的. 由于在注册和登陆这里,需要弹出一些对话框告诉用 ...

  6. Anytime项目开发记录1

    关于Android APP 应用设计,我并没有接受过系统的学习. 下面,是按照我一直以来的方法来进行编辑. 由于在程序开始之前并没有画类图,这里简单的讲述一下程序是如何设计的. 自己实现了一个Appl ...

  7. (转) [it-ebooks]电子书列表

    [it-ebooks]电子书列表   [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...

  8. Laravel 5.3 登录注册底层实现详解

          每个控制器都使用 trait 来引入它们需要的方法 */ 用于处理用户登录认证 用于处理新用户注册 包含重置密码逻辑 用于处理重置密码邮件链接   认证需要的视图 包含了应用的基础布局文件 ...

  9. Write thread-safe servlets [reproduced]

    If you write Web applications in Java, the servlet is your best friend. Whether you write Java Serve ...

随机推荐

  1. Bigger-Mai 养成计划,前端基础学习之HTML

    HTML 超文本标记语言(Hyper Text Markup Language) 1.一套规则,浏览器认识的规则. 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ...

  2. c# mongodb drive IngoreExtraElements and RegisterClassMap

    private static void RegisterClassMaps(IEnumerable<Type> clrTypes) { foreach (var clrType in cl ...

  3. Linux 搭建批量网络装机

  4. kafka consumer 配置详解

    1.Consumer Group 与 topic 订阅 每个Consumer 进程都会划归到一个逻辑的Consumer Group中,逻辑的订阅者是Consumer Group.所以一条message ...

  5. 算法 set / multiset -- lower_bound()的二分搜索

    lower_bound() 在数组中搜索时 搜不到 返回 .end(), 若需要返回0,用upper_bound()-lower_bound() 若要返回下一个下标  则需要在set / multis ...

  6. flutter安装教程(win7)

    本文是在安装flutter的时候,所遇到的问题参考的各个文档整理集合.此次是在win7上安装的问题记录.因为当初安装的时候针对win7的文档比较少,而且各个文档的解释比较散,本人遇到问题也是找了很久才 ...

  7. 小程序getLocation出现的各种问题汇总

    1.小程序无法弹出授权位置的弹框: 需要在app.json中增加相关配置文件: "permission": { "scope.userLocation": { ...

  8. jquery源码解读

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐进增强)优雅的处理能 ...

  9. linux 一键安装lnmp环境

    ①,登陆后运行:screen -S lnmp ②.如果提示screen: command not found 命令不存在可以执行:     yum install wget  ③. 执行命令:wget ...

  10. Anaconda与Spyder升级命令

    step1:首先以管理员的身份启动cmd.exe: step2:升级conda(升级Anaconda前需要先升级conda)命令为:conda update conda step3:升级anacond ...