我可以在Windows上编译Unix的pthread.h吗?

如果我尝试使用编译程序

#include <pthread.h>

在其中,我得到了错误:

pthread.h: No such file or directory

是否可以在Windows环境中进行编译?

我正在将Vista与最新的MinGW配合使用。

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

naspinski asked 2019-11-18T00:11:36Z
5个解决方案
49 votes

#include <windows.h>是用于线程的Unix / Linux(POSIX)API的头。 诸如Cygwin之类的POSIX层可能会使用#include <pthreads.h>编译一个应用程序。

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

仍然在[http://sourceware.org/pthreads-win32/]上维护了一个替换的“ glue”库; 请注意,它与MinGW / VS略有不兼容(例如,参见此处)。

Community answered 2019-11-18T00:12:12Z
17 votes

正如@Ninefingers提到的那样,pthreads仅适用于unix。 真的只有Posix。

也就是说,Microsoft确实有一个复制pthread的库:

用于UNIX版本3.5的Microsoft Windows服务

资料库下载

Randolpho answered 2019-11-18T00:12:55Z
11 votes

pthreads不在Windows上。 但是Windows从CreateThread开始具有广泛的线程功能。

我的建议是不要通过另一个系统的API来查看WinAPI。 这些系统是不同的。 这就像坚持使用舒适的Linux自行车座椅骑Win32自行车一样。 好吧,座位可能不合适,在某些情况下会掉下来。

线程在不同系统上的工作原理几乎相同,您拥有ThreadPool和互斥体。 与pthreads和Windows线程一起使用后,我可以说Windows线程比pthread提供了更多的功能。

学习另一个API相当容易,只需考虑概念(互斥体等),然后查找如何在MSDN上创建其中一个。

bobobobo answered 2019-11-18T00:13:39Z
4 votes

只需拿起TDM-GCC 64x软件包即可。 (它包含MinGW工具链的32位和64位版本,并包含在一个简洁的安装程序中。)更重要的是,它包含一个称为“ winpthread”库的东西。

它由libwinpthread.a标头,libwinpthread.alibwinpthread.dll.a静态库(适用于32位和64位)以及所需的.dll libwinpthread-1.dlllibwinpthread_64-1.dll(此版本截至2016年6月6日)组成。

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

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

以上两种似乎是最众所周知的方法。

希望这可以帮助。

user2873330 answered 2019-11-18T00:14:33Z
3 votes

我记得,Windows的gnu工具链有两种分布:mingw和cygwin。

我希望cygwin能够工作-已经做出了很多努力来使“标准” posix环境成为现实。

mingw工具链将msvcrt.dll用于其运行时,因此可能会公开msvcrt的“线程” api:_beginthread,它在<process.h>中定义

Chris Becke answered 2019-11-18T00:15:12Z
translate from https://stackoverflow.com:/questions/2150938/can-i-get-unixs-pthread-h-to-compile-in-windows