【问题标题】:Threading on both Windows and LinuxWindows 和 Linux 上的线程
【发布时间】:2011-03-09 05:47:34
【问题描述】:

我在互联网上看到了在 Windows 上使用 C++ 制作多线程应用程序的教程,以及在 Linux 上做同样事情的其他教程,但不是同时用于两者。是否有即使在 Linux 或 Windows 上编译也可以工作的函数?

【问题讨论】:

    标签: c++ multithreading


    【解决方案1】:

    我建议TinyThread++ 或TinyCThread。 我开始使用 TinyCThread,我发现它非常简单,它支持许多系统,包括 Windows 和 Linux。

    【讨论】:

      【解决方案2】:

      TBB's threads 中还提供了一个可移植选项。当然,TBB 鼓励您使用tasks 而不是threads 的概念,但是如果您只需要线程,那么this example 会有所帮助(您必须将已弃用的标头和线程声明转换为新的那些)。

      【讨论】:

        【解决方案3】:

        或者你可以使用ZThread,它相对于boost::thread来说相当轻量级

        【讨论】:

        • 我尝试在 Windows 上构建 ZThread,但发现不可能。知道如何在 Windows 上构建它吗?
        • 几年前我用过它,它编译得很好。我记得它已经是相同的 2.3.2 版本。你用过自动工具吗?或者定义 ZT_WIN32,如果构建 w/o GNU make?你有什么特别的问题?
        【解决方案4】:

        您还可以查看来自诺基亚 Qt 的QThread

        【讨论】:

          【解决方案5】:

          您可以使用 POSIX 线程并使用此库在 Windows 上获取 pthread。

          http://sourceware.org/pthreads-win32/

          (如果您已经非常习惯在 POSIX 系统上进行线程处理,这可能只是一个不错的选择...)

          【讨论】:

            【解决方案6】:

            您需要使用一个库,该库包含 Linux 上的 pthread 和 Windows 上的 Win32 线程库(CreateThread 和朋友)的实现。

            Boost thread 是一种流行的选择,它将系统抽象出来。

            【讨论】:

            • 有没有办法在不使用外部库的情况下做到这一点?我正在编写一个程序,我想摆脱它们。
            • @Langley boost 是一个如此常用的库,其中的部分被合并到 C++0x 中,您不妨不将其视为外部的第三方类库,而是将其安装并随时可用在所有时间和所有平台上。如果您正在为人们提供 API 并且不想要求 boost,那么编写一个包装器来隐藏 boost 的使用就很容易了,比如 pimpl。
            • 无论如何,您都无法避免使用外部库。它不是 C++ 的标准特性(至少在 std::thread 可用于 C++0x 之前)。但是,如果您要使用外部库,则 boost 是非侵入式的且易于构建。将此与另一个解决方案 QT 进行对比,后者需要安装一个巨大的商业许可框架,其代码必须通过元对象编译器进行自定义编译。
            • @stinky472:你认为 GPL/LGPL 商业化?如果要使用qt的信号和插槽,则只需要使用MOC即可。
            • @Langley:是的,您可以有两种代码路径,一种用于处理 pthread,一种用于处理 Win32 线程。然后,您可以将其包装到一个库中,此时您不妨使用外部库,而不是完成整个过程:)
            【解决方案7】:

            您应该查看 boost 库。

            【讨论】:

              【解决方案8】:

              您可以从boost::thread 开始。该库提供了一个抽象层,并在内部针对每个受支持平台的本机线程 API 工作。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-04-04
                • 1970-01-01
                • 1970-01-01
                • 2015-07-15
                • 2021-10-02
                • 2011-09-08
                • 1970-01-01
                相关资源
                最近更新 更多