如何在x86中使用SIGRTMIN或在Android NDK中使用armeabi-v7a abi?

时间:2018-11-26 13:15:43

标签: android linux android-ndk pthreads signals

我正在尝试使用 SIGRTMIN 信号在Android NDK中创建阻塞信号处理程序。

int startThread(){
   pthread_t thread;
   sigset_t set;

       /* Block SIGRTMIN other threads created by main()
          will inherit a copy of the signal mask. */

   sigemptyset(&set);
   int rc = sigaddset(&set, SIGRTMIN);
   __android_log_print(ANDROID_LOG_DEBUG, "LOG", "Return Code:%d",rc);
   __android_log_print(ANDROID_LOG_DEBUG, "LOG", "Error Code:%d",errno);
   pthread_sigmask(SIG_BLOCK, &set, NULL);
   pthread_create(&thread, NULL, &sig_thread, (void *) &set);
}

static void *sig_thread(void *arg)
{
   sigset_t *set = arg;
   int s, sig;
   for (;;) {
       s = sigwait(set, &sig);

       __android_log_print(ANDROID_LOG_DEBUG, "LOG", "Signal handling thread got signal %d\n", sig);
   }
}

在添加信号集sigaddset(&set, SIGRTMIN)

时,我得到的返回码为-1,错误代码为22( EINVAL-无效参数)。

这是在x86armeabi-v7a abi中发生的。如果我使用x86_64,那就行了。

有什么方法可以解决此问题,或者在Android的x86/armeabi-v7a abi中有什么替代方法?

0 个答案:

没有答案