Threads ohne volle Prozessorauslastung

Hallo,

Ich möchte von einer Microsoft Kinect Kamera mit C++ das Videobild auslesen und verwenden. Es funktioniert schon und auch mit Threads (nativ). Leider ist die Prozessorauslastung immer 100%.

Um es jetzt etwas schöner zu machen, möchte ich den Threadcode der boost-Bibliothek verwenden. Die Kinect API feuert ein Event, wenn ein Bild fertig ist. Mit API-Befehlen muss man es kopieren und ich rechne noch etwas. Jetzt liegt es im Buffer und wenn der Hauptthread es braucht kopiert er sich es.

Wie genau benutze ich die conditions in boost, also wie bekomme ich es hin ohne den Prozessor in einer Whileschleife voll auszulasten?

Interessante Links dazu
http://www.highscore.de/cpp/boost/multithreading.html
http://antonym.org/2009/05/threading-with-boost—pa…

Grüße Chris

Hallo

Um es jetzt etwas schöner (Blödsinn, willst Du reimen?)

zu machen, möchte ich den Threadcode

der boost-Bibliothek verwenden. Die Kinect API

boost … und kinect… kenn ich leider nicht. Könnte das „connect“ heißen?

feuert ein
Event, wenn ein Bild fertig ist. Mit API-Befehlen muss man es
kopieren und ich rechne noch etwas. Jetzt liegt es im Buffer
und wenn der Hauptthread es braucht kopiert er sich es.

Wenn Du das Event abfangen und die Nachricht an den ursprünglichen Empfänger weitersenden kannst, und dann auch noch das Bild oder den Speicher davon kopieren kannst, ist doch alles in Ordnung.
Wozu dann noch eine weitere Api?

Wie genau benutze ich die conditions in boost, also wie
bekomme ich es hin ohne den Prozessor in einer Whileschleife
voll auszulasten?

Mach es einfach. Dein Programm macht zuerst nichts. Die Nachricht leitest Du um an eine Adresse in Deinem Programm, indem Du sie vorher per Api umleitest. Du sendest dann ggf. die Nachricht an den ursprünglichen Empfänger und kopierst dann Dein Bild.

Multithreading ist ein eigenes Thema, und man kann relativ leicht neue Threads zur Leistungsaufteilung per Windows API eröffnen, wenns denn um Windows geht.
Hinweis: kenne mich bei C++ nicht im Detail aus, würde das in VB5 so machen.

MfG
Matthias

Hallo,

die Antwort von Matthias hast du ja sicherlich ja auch schon gelesen.

Ich bin (leider) kein C++ - Spezi. Ich habe selbst eine Kinect und mich für SimpleOpenNI und die auf Java basierende Programmiersprache Processing entschieden,

Unter Processing wird das Bild (welches Bild? RGB, Infrarot? Tiefenmodus aktiviert?) ausgelesen? Probleme bezüglich der Processorauslastung hatte ich in dieser Entwicklungsumgebung nicht.

Meine ersten Schritte habe ich auf

http://macherzin.net/kinect

beschrieben.

Ist sicherlich nicht dein Einsatz und insofern vielleicht auch nicht hilfreich. Solltest du aber einen anderen Ansatz in Erwägung ziehen …

Schönes Wochenende

godam