web-dev-qa-db-fra.com

Puis-je obtenir le pthread.h d'Unix à compiler sous Windows?

Si j'essaye de compiler un programme avec

#include <pthread.h>

dans celui-ci, je reçois l'erreur

pthread.h: No such file or directory

Est-il possible d'obtenir cette compilation dans un environnement Windows?

J'utilise Vista avec la dernière version de MinGW.

Je ne souhaite pas utiliser Microsoft Windows Services for UNIX version 3.5, car je devrai le déplacer dans un environnement Unix.

53
naspinski

pthread.h est un en-tête pour l'API Unix/Linux (POSIX) pour les threads. Une couche POSIX telle que Cygwin devrait probablement compiler une application avec #include <pthreads.h>.

L'API de thread Windows native est exposée via #include <windows.h> et cela fonctionne légèrement différemment du threading de Linux.

Néanmoins, il existe une bibliothèque de remplacement "glue" maintenue à l'adresse http://sourceware.org/pthreads-win32/ ; notez qu'il a quelques légères incompatibilités avec MinGW/VS (voir par exemple ici ).

47
user257111

Comme @Ninefingers l'a mentionné, les pthreads sont uniquement Unix. Posix seulement, vraiment.

Cela dit, Microsoft a une bibliothèque qui duplique les pthreads:

Microsoft Windows Services pour UNIX version 3.5

Téléchargement de la bibliothèque

16
Randolpho

pthread.h n'est pas sous Windows. Mais Windows a extensive fonctionnalité de threading, commençant par CreateThread .

Mon conseil est de ne pas être surpris à regarder WinAPI du point de vue de l'API d'un autre système. Ces systèmes sont différents . C'est comme si vous insistiez pour monter sur le vélo Win32 avec votre selle confortable pour vélo Linux. Eh bien, le siège risque de ne pas convenir et dans certains cas, il va tout simplement tomber.

Les threads fonctionnent à peu près de la même manière sur différents systèmes. ThreadPools et mutexes . Ayant travaillé avec pthreads et les threads Windows, je peux dire que les threads Windows offrent un peu plus de fonctionnalités que pthread.

Apprendre une autre API est assez facile, il suffit de penser en termes de concepts (mutex, etc.), puis de rechercher comment créer l'un de ceux-ci sur MSDN.

11
bobobobo

Il suffit de prendre le paquet TDM-GCC 64x. (Elle contient les versions 32 et 64 bits de la chaîne d’outils MinGW et fait partie d’un programme d’installation soigné.) Plus important encore, elle contient un élément appelé " winpthread " bibliothèque.

Il comprend des pthread.h entête, libwinpthread.a, libwinpthread.dll.a bibliothèques statiques pour les versions 32 bits et 64 bits et les .dlls requis libwinpthread-1.dll et libwinpthread_64-1.dll _ (en date du 01-06-2016).

Vous devrez créer un lien vers le libwinpthread.a bibliothèque pendant la construction. À part cela, votre code peut être identique à celui du code Pthread natif sous Linux. Je l'ai jusqu'à présent utilisé avec succès pour compiler quelques programmes Pthread de base en 64 bits sous Windows.

Vous pouvez également utiliser la bibliothèque suivante qui englobe l'API de threading Windows dans l'API pthreads: pthreads-win32 .

Les deux ci-dessus semblent être les moyens les plus connus pour cela.

J'espère que cela t'aides.

4
user2873330

Il y a, si je me souviens bien, deux distributions de la chaîne d'outils gnu pour windows: mingw et cygwin.

Je m'attendrais à un travail de cygwin - de nombreux efforts ont été déployés pour en faire un environnement posix "stadard".

La chaîne d'outils mingw utilise msvcrt.dll pour son exécution et exposera donc probablement le "thread" api de msvcrt: _ beginthread qui est défini dans <process.h>

3
Chris Becke