[boost] Thread-Klasse
-
Glocke schrieb:
Allerdings klappt es nicht so recht, eine Thread-Klasse - wie ich sie aus Java kenne - nachzubauen.
Warum solltest du das tun wollen?
Das ist wie wenn du daher kommst und sagst "ich kenne Autos schon aus England. Jetzt nehme ich ein Auto aus Deutschland und versuche die englischen Autos nachzubauen. Ich hab schon ein Lenkrad auf die andere Seite montiert und das andere abgebaut. Aber so richtig tut das noch nicht..."
C++ ist nicht Java. Versuch also auch nicht, in C++ irgendwas nachzubauen, was du aus Java kennst. Vor allem dann nicht, wenn es in C++ schon was fertiges gibt.
-
Ich hab jetzt mal das Example von http://en.cppreference.com/w/cpp/thread/thread/thread genommen
#include <iostream> #include <utility> #include <thread> #include <chrono> #include <functional> #include <atomic> void f1(int n) { for(int i=0; i<5; ++i) { std::cout << "Thread " << n << " executing\n"; std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } void f2(int& n) { for(int i=0; i<5; ++i) { std::cout << "Thread 2 executing\n"; ++n; std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } int main() { int n = 0; std::thread t1; // t1 is not a thread std::thread t2(f1, n+1); // pass by value std::thread t3(f2, std::ref(n)); // pass by reference std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread t2.join(); t4.join(); std::cout << "Final value of n is " << n << '\n'; }
und es probiert mit g++ test.cpp -o test -std=c++0x compiliert. Beim Ausführen kommt
terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted Abgebrochen (Speicherabzug geschrieben)
Was hab ich diesmal veregssen?
@pumuckl: Es gibt schon so eine Klasse? Warum finde ich die nicht
-
SeppJ schrieb:
[...] Und wenn du das gemacht hast, auch noch den Compilerschalter -pthread (sowohl beim Linken als auch beim Compilieren).
[...]
-
Kein Kommentar xDD Danke
-
Glocke schrieb:
Ich hab jetzt mal das Example von http://en.cppreference.com/w/cpp/thread/thread/thread genommen
[...]
@pumuckl: Es gibt schon so eine Klasse? Warum finde ich die nichtDies ist alles sehr verwirrend...
-
Glocke schrieb:
@pumuckl: Es gibt schon so eine Klasse? Warum finde ich die nicht
Jup, die nennt sich std::thread... warum du nicht findest, was du die ganze Zeit schon benutzt, versteh ich auch nicht
-
Mal abgesehen davon, dass die Java-Threads so ziemlich der groesste Design-Fail ueberhaupt sind. Pfui Teufel.
-
Kellerautomat schrieb:
Mal abgesehen davon, dass die Java-Threads so ziemlich der groesste Design-Fail ueberhaupt sind. Pfui Teufel.
Na wenn der mächtige Kellerautomat das sagt muss es ja wohl stimmen einself.
-
class Thread implements Runnable
-
Und das ist jetzt schlimm weil ...?
-
Ein Thread ist nichts, das man ausfuehrt, sondern etwas, das man etwas ausfuehren laesst. Daher zu behaupten, ein Thread sei ein Runnable (= implements), ist voelliger Schwachsinn. Sollte daher eher so sein:
class Thread { private Runnable runnable; // ... }
Und dann haette Thread auch keine run()-Methode, die das Runnable im selben Thread ausfuehrt.
-
Und deswegen ist die ganze Java-Threads Implementierung ein einziger Design-Fail. Hätten wir das auch geklärt.
-
Das Interface ist ein Design-Fail. Jop. :p