我可以得到Unix的pthread.h在Windows中编译?

如果我尝试编译一个程序

#include <pthread.h> 

在其中,我得到的错误:

 pthread.h: No such file or directory 

是否有可能得到这个在Windows环境下编译?

我正在用最新的MinGW使用Vista。

我不想使用Microsoft Windows Services for UNIX版本3.5,因为我将不得不将它移到Unix环境中。

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

本地Windows线程API通过#include <windows.h>暴露,并且与Linux的线程略有不同。

尽pipe如此,在http://sourceware.org/pthreads-win32/上还有一个替代的“胶水”库。; 注意它与MinGW / VS有一些轻微的不兼容(例如见这里 )。

正如@Ninefingers提到的,pthread只是unix。 Posix只,真的。

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

Microsoft Windows Services for UNIX版本3.5

图书馆下载

pthread.h不在Windows上。 但Windows具有丰富的线程function,从CreateThread开始。

我的build议是不要被其他系统的API镜头看到WinAPI。 这些系统是不同的 。 就像坚持用舒适的Linux自行车座椅骑着Win32自行车一样。 那么座位可能不合适,有时会脱落。

线程在不同系统上的工作原理相同,你有ThreadPools和互斥体 。 经过pthreads和Windows线程的工作,我可以说Windows线程提供比pthread更多的function。

学习另一个API非常简单,只需考虑概念(互斥体等),然后查看如何在MSDN上创build其中的一个。

据我所知,有两个GNU工具链的窗口分布:mingw和cygwin。

我期望cygwin的工作 – 已经做了很多努力,使之成为一个“stadard”posix环境。

mingw工具链为其运行时使用msvcrt.dll,因此可能会暴露msvcrt的“线程”api:在<process.h>定义的_beginthread

只需拿起TDM-GCC 64x包装。 (它兼容MinGW工具链的32位和64位版本,并且在一个整洁的安装程序中。)更重要的是,它包含了一个叫做“ winpthread ”库的东西。

它由32位和64位的pthread.h头文件, libwinpthread.alibwinpthread.dll.a静态库以及所需的.dll libwinpthread-1.dlllibwinpthread_64-1.dll (这是2016年1月6日)。

在构build期间,您需要链接到libwinpthread.a库。 除此之外,您的代码可以与Linux上的本地Pthread代码相同。 到目前为止,我已经成功地使用它在Windows上编译64位基本的Pthread程序。

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

以上两个似乎是这方面最知名的方法。

希望这可以帮助。