Threads
-
Hallo,
Ich programmiere unter VS2008 für Windows. Nun würde ich gerne eine Methode in einem extra Thread laufen lassen. Diese Methode erzeugt Daten, die dann in einen Vektor geschrieben werden. Aus dem Haupt-Thread werden die Daten dann gelesen. Nun möchte ich gerne wissen wie ich einen Thread erzeugen kann und wie ich Semaphoren oder ähnliches nutzen kann um zu verhindern das ein Thread liest während der andere schreibt.
Gruß
-
Am besten nutzt Du den BackgroundWorker (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx) oder aber gleich die Klassen aus dem Namespace System::Threading (http://msdn.microsoft.com/en-us/library/system.threading.aspx).
Natürlich darf folgender Hinweis nicht fehlen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-263084.htmlAusserdem hoffe ich, Du kennst den Unterschied / Rahmenbedingungen bei C++ (ISO) und C++/CLI.
Simon
-
Genau das wollte ich ja eben nicht, weil das nicht funzt und der Background-Willi, Müll ist, einfach nur Schrott.
-
Dann nimmst du besser die Klassen aus dem Namespace System::Threading. Habe es damit auch gemacht und es funktioniert sehr gut.
Um zu verhindern, dass ein Thread den Vector ausliest, während der andere ihn schreibt, solltest du die Lock-Methode verwenden. Leider musst du die in C++/CLI etwas umständlich programmieren, da es die nicht direkt gibt. Du verwendest dazu die Monitor-Klasse und dort die Methoden "Enter" und "Exit". Dabei legst du als Object den Vektor rein.
Gut beschrieben ist das hier (allerdings für C#):
www.albahari.com/threading/
-
oorg schrieb:
Genau das wollte ich ja eben nicht, weil das nicht funzt und der Background-Willi, Müll ist, einfach nur Schrott.
Aha, und weswegen?
Ausserdem habe ich ja geschrieben, falls nicht benutz halt die Klassen aus System::Threading.Simon