anytime
#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的更多相关文章
- Linux udhcp client (udhcpc) get IP at anytime
/*************************************************************************************** * Linux udh ...
- Anytime项目开发记录0
Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...
- Anytime项目开发记录4
做事情列表,我在程序中命名为“正在做”. 这是一个Fragment,应用的主页面,由一个MainActivity加上DoingListFragment和PersonFragment组成.PersonF ...
- Anytime项目开发记录3
应用想要做的好,反馈必然少不了~哈哈~ 用户的反馈.意见.建议,甚至是谩骂,都是对项目的反馈. 如果一个应用没有听取用户的反馈,那么应用会离着用户越来越远.懂得用户要什么是一回事,听得到用户的反馈,则 ...
- Anytime项目开发记录2
注册,登陆于密码找回.这是这次记录的主要内容. 首先,我们来看类图: 因为一直在改,所以与第二篇介绍项目框架时的图会有一些不一样. 代码都是非常简单的. 由于在注册和登陆这里,需要弹出一些对话框告诉用 ...
- Anytime项目开发记录1
关于Android APP 应用设计,我并没有接受过系统的学习. 下面,是按照我一直以来的方法来进行编辑. 由于在程序开始之前并没有画类图,这里简单的讲述一下程序是如何设计的. 自己实现了一个Appl ...
- (转) [it-ebooks]电子书列表
[it-ebooks]电子书列表 [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...
- Laravel 5.3 登录注册底层实现详解
每个控制器都使用 trait 来引入它们需要的方法 */ 用于处理用户登录认证 用于处理新用户注册 包含重置密码逻辑 用于处理重置密码邮件链接 认证需要的视图 包含了应用的基础布局文件 ...
- Write thread-safe servlets [reproduced]
If you write Web applications in Java, the servlet is your best friend. Whether you write Java Serve ...
随机推荐
- 单元测试系列之八:Sonar 数据库表关系整理一(续)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...
- Native App自动化测试及Appium框架介绍
一 自动化工具简介 1 Appium : 开源,跨平台的自动化测试工具,用于测试Native(原生)和Hybrid(混合)应用,支持IOS/Android/FirefoxOS 平台. 2 环境 : ...
- SQL 删除数据 的所有用法
https://blog.51cto.com/13588598/2066335 1.使用 delete 语句删除表中的数据:语法:delete from <表名> [where <删 ...
- JavaWeb网上商城项目中sql语句问题的解决
出现的问题 解决方法 对ProductDaoImpl建立Junit测试得到问题所在 学到了 Junit case测试验证和debug分步执行 mysql是关系型数据库.Redis是非关系型数据库且比m ...
- video 自动循环播放
video 只加autoplay并不能自动播放,需要再加上muted <video controls="controls" autoplay loop muted> ...
- DataFrame 重新设置索引: reindex 和 reset_index 的区别
将两个 DataFrame 拼接后,想要对拼接后的 DataFrame 重新设置索引要用 reset_index 方法,要想让之前的索引消失,传入参数:drop=True.具体事例: data2017 ...
- Cordova入门系列(一)创建项目
Cordova是什么? 初学Cordova的人,虽然了解一点点,知道Cordova是用来将html, css, js变成app的,但并不知道到底是怎么用的,原理是什么.经常会有这样的困惑: 它是一个可 ...
- 分布式拒绝服务攻击(DDoS:Distributed Denial of Service)
DDoS攻击通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的. 指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力. ...
- vbuffer.hpp
//vov #ifndef VBUFFER_HPP #define VBUFFER_HPP #include <iostream> #include <deque> #incl ...
- DPDK kni创建要先于port开启
DPDK kni创建要先于port开启 1. DPDK kni创建使用API:- rte_kni_init- rte_kni_alloc 2. DPDK port开启使用API:- rte_eth_d ...