Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ualarm()等效物(Android仿生libc)_Android_Linux_Android Ndk_Libc_Bionic - Fatal编程技术网

ualarm()等效物(Android仿生libc)

ualarm()等效物(Android仿生libc),android,linux,android-ndk,libc,bionic,Android,Linux,Android Ndk,Libc,Bionic,未在Android版本的libc、bionic check中实现。此外,ualarm已经过时 我正在Android NDK上移植一个应用程序,所以我需要一个相当于UALARM9999999的东西,即每秒定期发送一个SIGALRM的东西 也许和你一起?似乎是这样。但是手册页中的例子真的不是微不足道的 代码我愿意移植到Android NDK: /* * Set a recurring 1 second timer that will call sigalrm() and switch to

未在Android版本的libc、bionic check中实现。此外,ualarm已经过时

我正在Android NDK上移植一个应用程序,所以我需要一个相当于UALARM9999999的东西,即每秒定期发送一个SIGALRM的东西

也许和你一起?似乎是这样。但是手册页中的例子真的不是微不足道的

代码我愿意移植到Android NDK:

/* 
 * Set a recurring 1 second timer that will call sigalrm() and switch to 
 * a new channel.
 */

    act.sa_handler = sigalrm_handler;
    sigaction (SIGALRM, &act, 0);
    ualarm(CHANNEL_INTERVAL, CHANNEL_INTERVAL);
    change_channel(1);

/* Whenever a SIGALRM is thrown, go to the next 802.11 channel */
void sigalrm_handler(int x)
{
    next_channel();
}

好的,创建计时器是关键。可惜没有人及时举例说明

我通过简化构建了这段代码

要禁用计时器,请执行以下操作:

timer_delete(timerid);
还请注意,ualarm使用SIGALRM信号。在这段代码中,我们使用的是SIGUSR1

SIGALRM、SIGVTALRM和SIGPROF 当调用前面的报警设置中指定的时间限制达到时,SIGALRM、SIGVTALRM和SIGPROF信号被发送到进程 setitimer之类的函数将失效。SIGALRM在实际或 时钟时间流逝。当服务器使用CPU时间时,发送SIGVTALRM 这个过程会过去。SIGPROF在进程和 由系统代表的进程经过

SIGUSR1和SIGUSR2 SIGUSR1和SIGUSR2信号被发送到进程,以指示用户定义的条件


如果您使用的多个计时器都使用SIGUSR1,则可能存在计时器冲突。检查以使用SIGUSR1处理多个计时器。

答案在Linux ualarm手册页中:此函数已过时。使用setitimer2或POSIX interval timers timer_create2等。谢谢,但这就是我在问题中思考的原因。我刚刚花了1个小时来完成相关代码。再过1小时,创建删除计时器代码为ualarm0,0等效值需要计时器引用。。。将更新该问题的答案。
some_function(..., &timerid);
void some_function(..., timer_t *timerid)
timer_delete(timerid);