【问题标题】:Android/Linux thread join with timeoutAndroid/Linux 线程加入超时
【发布时间】:2012-11-24 23:31:54
【问题描述】:

是否有一个 pthreads API 调用可以做一些类似于pthread_join() 但有超时的事情?我正在寻找一个类似于 Windows WaitForSingleObject(HANDLE handle, int timeout) 函数的函数。我知道有一个pthread_timedjoin() 电话,但这只适用于某些版本的 Linux(绝对不适用于 Android)。

【问题讨论】:

    标签: android linux multithreading timer pthread-join


    【解决方案1】:

    不,没有用于定时 pthread_join() 的标准 API,而且在 Android 使用的仿生 C 库中也没有。虽然查看仿生源代码,但他们很容易实现 glibc 中可用的 pthread_timedjoin_np() API。

    您可以做的是修改您的线程以在它完成并即将退出时发出 pthread_cond_t 信号。您想要在该线程上等待的其他线程在条件变量上执行 pthread_cond_timedwait()。

    【讨论】:

    • 我在网上看到过两种解决方案:pubs.opengroup.org/onlinepubs/000095399/xrat/…therealdavebarry.blogspot.com/2006/03/… 第一种似乎创建了一种特殊类型的定时线程。第二个..我不太确定。
    • 我最终选择了第二种解决方案。唯一的问题是,我必须找到 pthread_cancel() 的替代品...
    • 您可以将条件变量解决方案与pthread_cleanup_push()pthread_cleanup_pop() (see the POSIX manual page) 结合使用;这可能会让你继续使用pthread_cancel()。我知道这是一个旧答案,但它仍然出现在“pthread_join timeout”的搜索结果中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2013-11-07
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多