【问题标题】:Synchronizing threads and signalling同步线程和信号
【发布时间】:2015-07-06 19:39:18
【问题描述】:

我试图告诉一个线程在另一个线程从命名管道读取数据后继续计算是可以的。目前,我有一个 while 无限循环,它每次都检查新数据。但这效率低下,因为它消耗了 100% 的 CPU...

我的问题是...有没有办法等到一个线程检查新数据并告诉另一个线程可以继续(类似于信号)?

【问题讨论】:

  • 您的问题正是 condition variable 旨在解决的问题。
  • 在这种情况下使用互斥锁是有意义的。检查这个link

标签: c++ multithreading signals


【解决方案1】:

Qt 拥有你想要的一切,QThread 可以很好地处理信号和插槽。

【讨论】:

  • C++11 标准库也有所需的一切,通常是第一个考虑的选项,但考虑到问题意味着现有的线程代码 - 任何已经在使用的库也可能用于此目的....
  • Qt 在他的问题中可用,他问我回答,有什么问题?
【解决方案2】:

您的问题有多种解决方案:

  • Qt的信号槽模型
  • C++:Boost.Signals2 或 Boost.Signals(已弃用)
  • C++:libsigc++ - 基于模板
  • C++:签名槽
  • C++:XLObject - 基于模板,面向 Qt。
  • C++:信号
  • C: libevent - 多线程、平台无关
  • C:libev - libevent 的最小替代品。

查看它们并找到最适合您的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2011-04-25
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多