从睡眠中唤醒主线程

Posted

技术标签:

【中文标题】从睡眠中唤醒主线程【英文标题】:Wake up main thread from sleep 【发布时间】:2018-12-04 13:22:20 【问题描述】:

如何从子线程内部(不终止子线程)唤醒主线程(当前由于 sleep() 函数调用而处于休眠状态)?

我想让我的主线程等待来自子线程的信号,而不使用无限循环或其他任何消耗 CPU 功率的东西。

我发现的关于这个主题的唯一事情是主线程唤醒了一个子线程,而不是相反。

【问题讨论】:

linux.die.net/man/3/pthread_cond_signal ? 不要使用 sleep(),而是使用适当的 'blocking-until' 函数并保持合作。 使用pthread_kill 向特定线程发送信号。 带有定时等待的事件、信号量或条件变量。所有重要的操作系统都有一些可以使用的同步原语。在主线程中创建同步对象,将其作为线程创建参数的一部分发送给工作线程,在需要时在主线程中等待/等待,准备好后在子线程中发出信号。 【参考方案1】:

如果您只想暂停线程,直到它收到来自另一个线程的信号,这正是pause function 的用途。

pause() 导致调用进程(或线程)休眠,直到 发出的信号要么终止进程,要么导致 调用信号捕获函数。

【讨论】:

以上是关于从睡眠中唤醒主线程的主要内容,如果未能解决你的问题,请参考以下文章

Reactor模式和Proactor模式

在 Objective C 中调度块的执行

在后台线程上执行异步套接字

如何在等待调用委托时让主线程进入睡眠状态?

多线程与线程池

有没有办法唤醒睡眠线程?