Linux下的两种timer方法 (Android 下NDK开发)
来源:互联网 发布:淘宝咸鱼会不会被骗 编辑:程序博客网 时间:2024/05/21 18:50
最近在做android下JNI纯C开发时,用到了timer,如果从java走可能太慢,就想着用linux里面的api,找到两种实现:
1:
struct itimerval tick;
int ret = 0 ;
signal(SIGALRM, sigroutine);
systime_idx = idx;
tick.it_value.tv_sec = 10; //十秒钟后将启动定时器
tick.it_value.tv_usec =100*1000;//100毫秒
tick.it_interval.tv_sec =1; //定时器启动后,每隔1秒将执行相应的函数
tick.it_interval.tv_usec = 0;
ret = setitimer(ITIMER_REAL , &tick, NULL);//ITIMER_REAL
if ( ret != 0)
{
//DEBUG("TIMER ERROR");
}
这一种很传统,顺序是先跑完tick.it_value.tv_sec 的值,然后再跑完tick.it_value.tv_usec 的值(注意:这个单位是微秒,所以毫秒要乘以1000)
然后判断如果tick.it_interval里面不为0的话,则每过N秒后循环调用。
当timer到了的时候会发送SIGALRM 的signal,然后调用sigroutine函数,这个函数定义类型为 void (fun*)(int ID);
注意点:tick.it_value 必须有值,如果为0则无效timer。
如果想只循环一次就把tick.it_interval两个值设置为0。
2:
struct itimerval itimer;
//systime_idx = idx;
itimer.it_interval.tv_sec = 0;
itimer.it_interval.tv_usec =0;
itimer.it_value.tv_sec = 0;
itimer.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &itimer, NULL);
sigset_t block_mask;
//屏蔽所有不用的信号
sigfillset(&block_mask);
sigdelset(&block_mask, SIGALRM);
sigprocmask(SIG_BLOCK, &block_mask, NULL);
//sigaction
struct sigaction sigact;
sigfillset(&sigact.sa_mask);
sigact.sa_handler=sigroutine;
sigaction(SIGALRM, &sigact, NULL);
这种方法比较高级,乍看起来很相似,但是用起来这个2方法却出了很多问题。
比如当按住按键的时候,或者触摸屏幕的时候,很容易造成程序关闭。。不知道原因,希望有人指点一二~
所以还是老老实实的用第一种方法吧。
- Linux下的两种timer方法 (Android 下NDK开发)
- Windows下Android NDK开发的几种方法总结
- Windows下Android NDK开发的几种方法总结
- linux下的ndk开发
- Windos下Android(ADT Bundle)配置NDK的两种方法------ADT、Cygwin、NDK配置汇总
- Windos下Android(ADT Bundle)配置NDK的两种方法------ADT、Cygwin、NDK配置汇总
- Windos下Android(ADT Bundle)配置NDK的两种方法------ADT、Cygwin、NDK配置汇总
- Android Studio添加NDK开发能力的两种方法
- linux下搭建android NDK开发环境
- Linux下搭建android NDK开发环境
- Linux下实现定时器Timer的几种方法
- Linux下实现定时器Timer的几种方法
- Linux下实现定时器Timer的几种方法
- Windows环境下Android NDK的开发
- android studio下的NDK开发详解
- Android Studio下的ndk开发
- android studio下的ndk开发流程
- Android Studio下的ndk开发步骤
- 关于实现魔方复原的Thistlethwaite Algorithm
- sql server 2005 数据库关系图 开不了
- 对js面向对象的初步理解
- Asp.net中GridView使用详解(很全,很经典)
- Android的属性系统
- Linux下的两种timer方法 (Android 下NDK开发)
- Qt拖放技术之一
- 鼠标钩子详解
- 从html生成pdf
- 匿名命名空间或者static的使用
- Trufun Bacon 需求管理工具服务器版产品介绍
- WinCE中串口驱动及接口函数介绍(转)
- 英特尔2010IDF前瞻日:未来计算的核心是爱
- WinCE中串口驱动及接口函数介绍(转)