Я пытаюсь использовать сигнал 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);
}
}
Я получаю код возврата -1 и код ошибки 22 (EINVAL - неверный аргумент ) при добавлении набора сигналов sigaddset(&set, SIGRTMIN)
Это происходит в x86
или armeabi-v7a
abi.Если я использую x86_64
, тогда он работает.
Есть ли способ решить эту проблему или какой-либо альтернативы в x86/armeabi-v7a
abi в Android?