MinGW Thread Support Workaround
-
Ich leide gerade darunter, dass meine lieblings MinGW-W64 Distro keine std::thread Implementierung bietet. (nuwen.net, von STL (der Person))
Frage 1) Kann man std::mutex [, ...] und boost::thread mischen ohne sich gedanken zu machen?
Frage 2) Ist folgender Workaround Hack zu dirty? (zusammengebastelt mit ein bisschen Hilfe von StackOverflow).
#include <iostream> #include <boost/thread.hpp> #include <type_traits> // it hurts to look at this very evil thing. namespace std { class thread; } #include <thread> namespace tfix { template< typename T> struct has_destructor { template <typename A> static std::true_type test(decltype(std::declval<A>().~A()) *) { return std::true_type(); } template<typename A> static std::false_type test(...) { return std::false_type(); } typedef decltype(test<T>(0)) type; static const bool value = type::value; }; template <unsigned hasStdThreads> struct ThreadSelector { using thread = boost::thread; }; template <> struct ThreadSelector <1> { using thread = std::thread; }; using thread = ThreadSelector<has_destructor<std::thread>::value>::thread; } int main() { tfix::thread thr([](){std::cout << "Hello\n";}); thr.join(); // EDIT - WICHTIG! ...ok war eh nur zur demonstration :P return 0; };
-
Spricht etwas gegen eine andere MinGW Distro?
Ich verwende TDM-GCC mit pthreads und habe thread-Support.
-
Es gibt jede Menge verschiedene gccs und der neuste hat eigentlich alle C++11 Features dabei.
EDIT: Wenn du aus irgendeinem Grund nicht wechseln willst: Boost hat fast die gleichen Threads dabei.
-
Marthog schrieb:
EDIT: Wenn du aus irgendeinem Grund nicht wechseln willst: Boost hat fast die gleichen Threads dabei.
Der Source oben typedefed tfix::thread entweder mit std::thread wenn vorhanden und wenn nicht mit boost::thread.
----------------------------------------------------------------
ich habe gerade TDM-GCC installiert und bau gleich boost.
Was mich am meisten stört sind die libs, wo STL gleich ein paar nette mitliefert
(ohne boost weigere ich mich zu programmieren, zlib habe ich schon oft gebraucht, gdb binaries sind nicht überall gleich mit drin, die LAME lib habe ich schon verwendet, ...)Ich hätte so gern einfach ein
libman -S boost
libman -S zlib
...(oder ähnlich)
EDIT: mit dem passenden compiler natürlich. Mir ist schon klar, dass ich hier nicht mischen kann. Vermutlich ist das bauen mit all den Optionen einfach zu individuell, als dass jemand sowas machen würde
Nuget von VisualStudio finde ich für C++ libs auch eher dürftig. (Wobei ich den Visual Studio Compiler lieber aus dem Weg gehe, wenn ich kann.)
----------------------------------------------------------------
Ich entwickele mittlerweile mit dem Grundsatz: Was auf Linux läuft muss auch auf Windows laufen und andersrum. (Auch weil ich beide Betriebssysteme nutze)
Und ich will mich auch nicht auf den C++ Implementierungsstatus vom VC++ reduzieren.EDIT 2: Ich habe ja sonst nichts gegen Windows, aber entwickeln ist auf linux [ArchLinux <3] sooo schön im Vergleich

-
Tim06TR schrieb:
libman -S boost
libman -S zlib
...(oder ähnlich)
MSYS2?
-
EinGast schrieb:
Tim06TR schrieb:
libman -S boost
libman -S zlib
...(oder ähnlich)
MSYS2?
... Ich liebe dich

Damit sind alle Probleme gelöst (auch schon ausprobiert).
Habe die libs einfach da und threads funktionieren auch.