Puis-je obtenir Unix est pthread.h pour compiler sous Windows?
Si j'essaie de compiler un programme avec
#include <pthread.h>
j'obtiens l'erreur:
pthread.h: No such file or directory
Est-il possible d'obtenir ce à compiler dans un environnement Windows?
Je suis à l'aide de Vista avec la dernière MinGW.
Je ne veux pas utiliser le Microsoft Windows Services for UNIX Version 3.5 que je vais avoir à se déplacer à un environnement Unix.
Vous devez vous connecter pour publier un commentaire.
pthread.h
est un en-tête pour Unix/Linux (POSIX) de l'API pour les threads. Une couche POSIX comme Cygwin serait probablement compiler une application avec#include <pthreads.h>
.Natif de Windows filetage API est exposée via
#include <windows.h>
et il fonctionne un peu différemment de Linux threading.Encore, il y a un remplacement de la bibliothèque "colle" maintenu à http://sourceware.org/pthreads-win32/ ; note qu'il a quelques petites incompatibilités avec MinGW/VS (voir, par exemple,ici).
__thread
, mais quelqu'un d'autre (de l'éditeur de liens? chargeur? bibliothèque?) ne joue pas bien...Comme @Ninefingers mentionné, pthreads sont sous unix uniquement. Posix seulement, vraiment.
Cela dit, Microsoft dispose d'une bibliothèque qui duplique les pthreads:
Microsoft Windows Services for UNIX Version 3.5
Bibliothèque De Téléchargement
pthread.h
n'est pas sur Windows. Mais Windows a vaste le filetage de la fonctionnalité, en commençant par CreateThread.Mon conseil est de ne pas se faire attraper en regardant WinAPI à travers la lentille d'un autre système d'API. Ces systèmes sont différents. C'est comme en insistant sur l'équitation Win32 vélo avec votre confortable Linux siège de vélo. Ainsi, le siège ne peut pas s'droit et, dans certains cas, il va tout simplement tomber.
Threads assez bien travailler même sur des systèmes différents, vous avez ThreadPools et mutex. Ayant travaillé avec les deux
pthreads
et les threads Windows, je peux dire que le Windows threading offre un peu plus de fonctionnalités quepthread
n'.L'apprentissage d'une nouvelle API est assez facile, il suffit de penser en termes de concepts (mutex, etc), puis chercher comment créer un de ceux sur MSDN.
Il suffit de choisir la TDM-GCC 64x paquet. (Il constains à la fois les versions 32 et 64 bits de la chaîne de compilation MinGW et est livré dans un joli programme d'installation.) Plus important encore, il contient quelque chose qui s'appelle le "winpthread" de la bibliothèque.
Il se compose de la
pthread.h
en-tête,libwinpthread.a
,libwinpthread.dll.a
les bibliothèques statiques pour les versions 32-bit et 64-bit et le nécessaire .dlllibwinpthread-1.dll
etlibwinpthread_64-1.dll
(ce, dès 01-06-2016).Vous aurez besoin pour le lien vers le
libwinpthread.a
de la bibliothèque lors de la construction. Autre que cela, votre code peut être le même que pour les natifs Pthread code sur Linux. Je n'ai jusqu'à présent utilisé avec succès pour compiler quelques Pthread programmes en 64 bits sur windows.Alternativement, vous pouvez utiliser la bibliothèque qui enveloppe le windows filetage API dans les pthreads API:
pthreads-win32.
Les deux ci-dessus semblent être les plus connus des moyens pour cela.
Espère que cette aide.
Il y a, comme je le rappel, deux distributions de la chaîne d'outils gnu pour windows: mingw et cygwin.
Je m'attends à de cygwin travail, beaucoup d'efforts ont été faits pour en faire un "stadard" posix environnement.
Le mingw de la chaîne d'utilise msvcrt.dll pour son exécution, et donc probablement exposer msvcrt du "fil" de l'api: _beginthread qui est défini dans
<process.h>