C++ Thread oder Referenzproblem

KingJoshii1000

Lieutenant
Dabei seit
Apr. 2010
Beiträge
879
Hallo,
ich habe mir vorgenommen ein simples Programm zu schreiben, welches Namen und Alter ein jeweilige Vectoren einliest. Nun möchte ich auch einen Befehl einbauen, welcher die verfügbaren Befehle kurz ausgibt. Dabei möchte ich gerne, alle Befehle in einen Vector<string> packen, welcher von einem seperaten Thread über eine Funktion gefüllt wird. Dabei wird der Vector in der Main-Funktion deklariert und via Referenz über die Funktion gefüllt. Jedoch wenn ich nun 'h' eingebe, erfolgt eine leere Ausgabe. Der Vector wurde nicht bearbeitet. Wenn ich die Funktion "normal" aufrufe, sprich nicht von einem Extrathread wird der Vector erfolgreich gefüllt. Wo genau liegt der Fehler?
Code:
#include "standart.h"
#include <thread>
using namespace standart;

const char quit = 'q';
const char help = 'h';
const char name = 'n';
const char age = 'a';

void add_available_commands(vector<string>&);

int main(){
	name_pairs np;
	vector<string>available_commands;
	thread add_commands(add_available_commands,available_commands);
	add_commands.join();
	char input = ' ';
	cout << "Geben Sie h fuer Hilfe ein, um alle Befehle aufzulisten." << endl;
	cout << ">";
	while (cin >> input)
	{
		switch (input)
		{
		case name:
			np.read_names();
			cout << "Namenseingabe erfolgreich beendet." << endl;
			break;
		case age:
			np.read_ages();
			cout << "Alterseingabe erfolgreich beendet." << endl;
			break;
		case quit:
			return 0;
		case help:
			for (int i = 0; i < available_commands.size(); ++i){
				cout << available_commands[i] << endl;
			}
			break;
		default:
			cout << "Dieser Befehl ist nicht bekannt." << endl;
			break;

		}
		cout << ">";
	}
	keep_window_open();
}
void add_available_commands(vector<string>& a_c){
//Fügt alle Befehle über eine Referenz dem Vector<string>available_commands hinzu.
	a_c.push_back("Verfuegbare Befehle: ");
	a_c.push_back("n = Startet die Nameseingabe.");
	a_c.push_back("a = Startet die Alterseingabe.");
}
Wünsche ein schönes Wochenende

Mit freundlichen Grüßen :)
 

Stoane

Lieutenant
Dabei seit
Mai 2007
Beiträge
873
Ohne dein Problem gelesen zu haben: mach bitte das STANDART weg. ;)
 

antred

Lt. Commander
Dabei seit
Juni 2010
Beiträge
1.288
Darf man noch fragen, wozu der Extra-Thread, wenn du dann sowieso erst auf das Beenden des Threads wartest, bevor du die Eingaben weiterverarbeitest?
 

KingJoshii1000

Lieutenant
Ersteller dieses Themas
Dabei seit
Apr. 2010
Beiträge
879
Hallo,
erstmal danke für die schnellen Antworten :).
@Stoane: Das diente nur zur Übung für Namespace. Halt zum auszuprobieren und zu üben.
@TheCadillacMan: Werde ich mal ausprobieren dankeschön :)
@antred: Selbstverständlich darfst du fragen, ich wollte detach() statt join() nehmen. Wie schon bei Stoane gesagt, dient das Programm nur zum zumprobieren, soll ja eine Übung sein :)

Mit freundlichen Grüßen
 
Top