独立,独立于操作系统,架构中立,多线程库[关闭]
Posted
技术标签:
【中文标题】独立,独立于操作系统,架构中立,多线程库[关闭]【英文标题】:Standalone, OS-independent, Architecture-neutral, Multi-threaded Library [closed] 【发布时间】:2009-12-10 20:43:29 【问题描述】:哪些多线程 C++ 库可用于编写 Linux、Windows、Solaris 和 iPhone 应用程序?如:
TBB Boost OpenMP ACE POCO还有其他人吗?
【问题讨论】:
【参考方案1】:Boost 线程实际上是事实上的 C++ 线程标准。我建议您至少熟悉一下 Boost 线程 API,因为它或多或少与即将推出的标准化 C++0x std::thread
相同。
【讨论】:
Boost 增强器(嘘声?)可能会让人相信这一点,但事实上存在的标准可能是 pthreads。但是大多数编写 MT 代码的人发现很难抗拒平台特定功能的魅力。或者至少,我愿意。 @Neil - 这是一种很好的说法,即 boost/c++0x 线程是普通的。 @Neil - 我同意他们的 pthread 代码可能比 boost 更多。但是考虑到 std::thread 很快将成为真正的标准(不是事实上的)并且它是 C++(不是 C),我会说使用 boost 线程编写的任何代码都将更容易移植到 std::thread 是更广泛地使用。 @Nic - 我怀疑 std::thread 会在方便或需要时使用,但远非独占。 Fopen() 和家族是标准 C,但许多人选择使用本机系统调用。我猜 native_handle() 调用会很常见。【参考方案2】:FWIW,我不认为所有这些都是完全等价的。
ACE、Boost、Poco 和 QT 只是底层支持的线程平台的封装。在我看来,OpenMP 尤其是 TBB 在更高的抽象级别上运行,并鼓励以不同的方式看待问题。
【讨论】:
【参考方案3】:我还要加上最近移植到 iPhone 上的 POCO:
http://pocoproject.org/blog/?p=208
【讨论】:
【参考方案4】:qt 支持多线程...
【讨论】:
确实如此,但它不像我想要的那样独立。【参考方案5】:您可以使用 pthread 并实现自己的 C++ 包装器。那将是非常灵活和可移植的,并且您可以以适合您的方式定义 C++ 接口。但是,您可能需要付出更多的努力。
【讨论】:
【参考方案6】:对于您问题的第二部分:
将 C++ 集成到 Objective-C 中非常容易;我毫无问题地向我的应用程序添加了一个 C++ 库。您不使用任何特殊语法或任何东西。 Apple 有一些关于 Objective-C++ 的good info,但你必须已经了解 Objective-C 才能理解它。
警告:要制作 iPhone 应用程序,您必须了解基本的 Objective-C;至少这是控制界面的唯一方法。
【讨论】:
【参考方案7】:Boost.Thread 很棒.. 但不确定它是否适用于 iPhone。如果你的目标是 iPhone,你应该只使用NSThread 类,特别是它的detatchNewThreadSelector 函数来生成一个新线程。您可以使用performSelectorOnMainThread 函数在 UI 事件线程中执行工作。
在 iPhone 上使用 C++ 的问题是 iPhone 目前不支持 C++ 异常(它支持 Objective-C 使用的“SJLJ”异常,但不支持标准 C++ 异常),这意味着任何 C++ 代码使用 C++ 异常处理将无法在 iPhone 上链接。
【讨论】:
快速谷歌显示一些人能够为 iPhone 编译 Boost 的线程库。以上是关于独立,独立于操作系统,架构中立,多线程库[关闭]的主要内容,如果未能解决你的问题,请参考以下文章