代码之家  ›  专栏  ›  技术社区  ›  naspinski

我可以让unix的pthread.h在Windows中编译吗?

  •  52
  • naspinski  · 技术社区  · 14 年前

    如果我试图用

    #include <pthread.h>
    

    在其中,我得到了错误:

    pthread.h: No such file or directory
    

    是否可以让它在Windows环境中编译?

    我用的是vista和最新的mingw。

    我不想使用Microsoft Windows Services for Unix 3.5版,因为我必须将其移到Unix环境中。

    5 回复  |  直到 8 年前
        1
  •  46
  •   Community chadoh    7 年前

    pthread.h 是用于线程的Unix/Linux(POSIX)API的头文件。像cygwin这样的posix层可能会编译一个 #include <pthreads.h> .

    本机Windows线程API通过 #include <windows.h> 它的工作方式与Linux的线程略有不同。

    尽管如此,在 http://sourceware.org/pthreads-win32/ ;请注意,它与mingw/vs有一些轻微的不兼容(例如,请参见 here )

        2
  •  16
  •   Randolpho    14 年前

    正如@ninefingers所提到的,pthreads只是unix。只有POSIX,真的。

    也就是说,微软确实有一个复制pthreads的库:

    Microsoft Windows Services for UNIX Version 3.5

    Library Download

        3
  •  9
  •   bobobobo    11 年前

    pthread.h 不在窗户上。但Windows 广泛的 线程功能,从 CreateThread .

    我的建议是不要从另一个系统的API的角度看WinAPI。这些系统是 不同的 . 这就像坚持骑着舒适的Linux自行车座椅的win32自行车。嗯,这个座位可能不合适,在某些情况下它会掉下来。

    线程在不同的系统上几乎工作相同 ThreadPools mutexes . 两人都合作过 pthreads 而Windows线程,我可以说Windows线程提供的功能比 pthread 做。

    学习另一个API非常简单,只需考虑概念(mutex等),然后查找如何在msdn上创建一个API。

        4
  •  4
  •   Keyboard Penman    8 年前

    只需拿起TDM-GCC64X包。(它包含了32位和64位版本的mingw工具链,并且包含在一个整洁的安装程序中。)更重要的是,它包含一个名为 Win线程 “图书馆。

    它包括 pthread.h 标题, libwinpthread.a , libwinpthread.dll.a 32位和64位以及所需的.dlls的静态库 libwinpthread-1.dll libwinpthread_64-1.dll (截至2016年6月1日)。

    您需要链接到 一个LBWIN线程 生成过程中的库。除此之外,您的代码可以与Linux上的本机pthread代码相同。到目前为止,我已经成功地用它在64位Windows上编译了一些基本的pthread程序。

    或者,可以使用以下库将Windows线程API封装到pthreads API中: pthreads-win32 .

    以上两种方法似乎是最著名的方法。

    希望这有帮助。

        5
  •  3
  •   Chris Becke    14 年前

    我记得,有两个针对Windows的GNU工具链的发行版:mingw和cygwin。

    我希望Cygwin能发挥作用——已经做了很多努力使之成为一个“stadard”posix环境。

    mingw工具链在运行时使用msvcrt.dll,因此可能会公开msvcrt的“线程”API: _beginthread 定义见 <process.h>