我可以得到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.a
, libwinpthread.dll.a
静态库以及所需的.dll libwinpthread-1.dll
和libwinpthread_64-1.dll
(这是2016年1月6日)。
在构build期间,您需要链接到libwinpthread.a
库。 除此之外,您的代码可以与Linux上的本地Pthread代码相同。 到目前为止,我已经成功地使用它在Windows上编译64位基本的Pthread程序。
或者,您可以使用以下将线程API封装到pthreads API中的库: pthreads-win32 。
以上两个似乎是这方面最知名的方法。
希望这可以帮助。