2010-06-28 6 views
4

J'ai vu des tutoriels sur Internet pour faire des applications multithread en C++ sur Windows, et d'autres tutoriels pour faire de même sur Linux, mais pas pour les deux en même temps. Existe-t-il des fonctions qui fonctionneraient même si elles étaient compilées sous Linux ou Windows?Filetage sur Windows et Linux

Répondre

14

Vous auriez besoin d'utiliser une bibliothèque qui contient une implémentation à la fois pour pthread sous Linux et la bibliothèque de threads Win32 sous Windows (CreateThread et amis).

Boost thread est un choix populaire qui résume le système.

+0

Existe-t-il un moyen de le faire sans utiliser de bibliothèques externes? J'écris un programme que je voudrais garder libre d'eux. – Langley

+0

+1 pour les threads boost. – stinky472

+0

@Langley boost est une bibliothèque couramment utilisée avec des parties incorporées dans C++ 0x que vous pourriez aussi bien ne pas considérer comme une bibliothèque externe de type tierce et l'avoir installée et facilement disponible à tout moment et sur toutes les plateformes . Si vous fournissez une API pour des personnes et que vous ne voulez pas avoir besoin de boost, alors il est assez facile d'écrire un wrapper qui cache l'utilisation de boost dans, disons, un pimpl. – stinky472

2

Vous pouvez commencer par boost::thread. La bibliothèque fournit une couche d'abstraction et fonctionne en interne par rapport aux API de threads natives de chaque plate-forme prise en charge.

2

Vous devriez regarder la bibliothèque boost.

5

Vous pouvez utiliser des threads POSIX et utiliser cette bibliothèque pour obtenir des pthreads sous Windows.

http://sourceware.org/pthreads-win32/

(Ceci est probablement une bonne option si vous êtes déjà très utilisé pour faire le filetage sur un système POSIX ...)

+0

Je serais intéressé d'entendre pourquoi cette réponse a obtenu un downvote. –

+0

:) Merci pour la mise à jour. J'étais curieux au sujet de la downvote moi-même ... –

0

Vous pouvez également consulter QThread de Qt de Nokia

1

Ou vous pouvez utiliser ZThread, sa jolie légère, par opposition à boost::thread

+0

J'ai essayé de construire ZThread sur Windows et je l'ai trouvé impossible. Une idée de comment je peux le construire sur Windows? – Langley

+0

Je l'ai utilisé il y a quelques années, et ça s'est très bien passé. C'était déjà la même version 2.3.2, si je me souviens bien. Avez-vous utilisé les autotools? Ou défini ZT_WIN32, si le bâtiment sans GNU fait? Quel est votre problème en particulier? – Dark

0

Une option portable est également présent dans TBB's threads. Bien sûr, TBB vous encourage à utiliser le concept de tasks plutôt que threads, mais si vous n'avez besoin que de threads, alors this example pourrait vous aider (vous devrez convertir les en-têtes obsolètes et les déclarations de threads en nouveaux).

0

Je suggère TinyThread++ ou TinyCThread. J'ai commencé à utiliser TinyCThread, je l'ai trouvé incroyablement simple et il prend en charge de nombreux systèmes, y compris Windows et Linux.