如果我尝试使用
编译程序#include <pthread.h>
在其中,我收到错误:
pthread.h: No such file or directory
是否可以在Windows环境中进行编译?
我正在使用Vista和最新的MinGW。
我不想使用Microsoft Windows Services for UNIX Version 3.5,因为我必须将其移至Unix环境。
答案 0 :(得分:46)
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)。
答案 1 :(得分:16)
正如@Ninefingers所提到的,pthreads只是unix-only。只有Posix,真的。
也就是说,微软确实有一个复制pthreads的库:
答案 2 :(得分:11)
pthread.h
不在Windows上。但Windows具有广泛的线程功能,从CreateThread开始。
我的建议是不要被另一个系统API的镜头看到WinAPI。这些系统不同。这就像坚持用舒适的Linux自行车座椅骑Win32自行车一样。好吧,座位可能不合适,在某些情况下它会掉下来。
线程在不同系统上的工作方式基本相同,您有ThreadPools和mutexes。在使用pthreads
和Windows线程之后,我可以说Windows线程提供的功能比pthread
提供的功能要多得多。
学习另一个API非常简单,只需考虑概念(互斥等),然后查找如何在MSDN上创建其中一个。
答案 3 :(得分:4)
选择TDM-GCC 64x软件包。 (它保留了MinGW工具链的32位和64位版本,并且安装在一个简洁的安装程序中。)更重要的是,它包含一个名为“ winpthread ”库的东西。
它包含32位和64位的pthread.h
标头,libwinpthread.a
,libwinpthread.dll.a
静态库以及所需的.dlls libwinpthread-1.dll
和{{1 (截至2016年6月1日)。
您需要在构建期间链接到libwinpthread_64-1.dll
库。除此之外,您的代码可以与Linux上的本机Pthread代码相同。到目前为止,我已成功使用它在Windows上以64位编译一些基本的Pthread程序。
或者,您可以使用以下库将Windows线程API包装到pthreads API中: pthreads-win32
以上两种似乎是最为人熟知的方式。
希望这会有所帮助。
答案 4 :(得分:3)
我记得有两个用于windows的gnu工具链的发行版:mingw和cygwin。
我希望cygwin能够发挥作用 - 已经做了很多努力来使这个“标准”的posix环境。
mingw工具链使用msvcrt.dll作为其运行时,因此可能会暴露msvcrt的“线程”api:_beginthread,它在<process.h>
中定义