在调查过程中,我发现了NDK中信号原语实现中的几个空白。我当前的任务需要sem_timedwait (就像带有超时的sem_wait ),但是在NDK中找不到它。更重要的是:代码在iOS平台上应该是可移植的。
我目前的建议:
步骤1:用sem_wait创建单独的线程(thrd_id1) (等待sem_post,可以永远停留在那里)
步骤2:创建单独的线程(thrd_id2),以秒为单位,当我们醒来时
步骤3:当我们醒来时(thrd_id2)尝试用sem_wait (thrd_id1)取消线程,如果成功返回ETIMEOUT,否则由sem_post从另一个线程解锁sem_wait。但是,p线程的NDK实现没有可取消的线程。
对pthread_kill有另一个想法,但我怎么知道它是正常被杀死或终止的呢?
请给我建议。
发布于 2014-09-17 07:49:20
sem_timedwait存在于Android中,至少来自于r9d版本(我没有早期版本)--检查platforms/android-%yourplatform%/arch-%yourarch%/usr/include/semaphore.h。
如果切换到较新的NDK不是一种选择,我建议您使用以GNU实现为例。
https://stackoverflow.com/questions/25884824
复制相似问题