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
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.
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.
Vous devriez regarder la bibliothèque boost.
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 ...)
Je serais intéressé d'entendre pourquoi cette réponse a obtenu un downvote. –
:) Merci pour la mise à jour. J'étais curieux au sujet de la downvote moi-même ... –
Vous pouvez également consulter QThread de Qt de Nokia
Ou vous pouvez utiliser ZThread, sa jolie légère, par opposition à boost::thread
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
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
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).
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.
- 1. Filetage C# et Windows Forms
- 2. Filetage pour formulaire Windows
- 3. prises de fermeture sur linux et windows
- 4. Mono linux et windows
- 5. Filetage et noyaux
- 6. Hashlib sous Windows et Linux
- 7. minuterie sur le filetage?
- 8. 'sys.excepthook' et le filetage
- 9. en développement sur les machines Windows et Linux simultanément
- 10. Installation pour Mac et Linux sur une machine Windows
- 11. R encodages de caractères sur Windows, Mac et Linux
- 12. Filetage: verrouillage sur dictionnaire générique
- 13. Compiler l'assemblage pour Windows sur Linux
- 14. Eclipse CDT sur Windows pour Linux Développement
- 15. Rendre existants Application Windows fonctionnent sur linux
- 16. Différences ActionListener entre Windows et Linux
- 17. Différences WxPython entre Windows et Linux
- 18. Performances Telnet sous Windows XP et Linux
- 19. Compteurs de performance et filetage
- 20. mysql qt dans linux et windows
- 21. GUID pour l'application linux et windows, Qt
- 22. C++ Dynamic Platform Bibliothèques; Linux et Windows
- 23. Hibernate - comportement différent sous Linux et Windows
- 24. Programmation sur l'iPhone sous Windows/Linux?
- 25. Filetage GMail, IMAP et Ruby
- 26. Future.get() et InterruptedException filetage Asynchronous
- 27. mxmlc compile différemment sous Linux et Windows?
- 28. Windows et Linux équivalence fil priorité
- 29. Clavier cambodgien pour Windows et Linux?
- 30. Caractère EOL sous Linux et Windows
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
+1 pour les threads boost. – stinky472
@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