Variablen in Klasse können nicht abgerufen werden.



  • Hallo,

    ich habe eine Funktion in einer Klasse, die eine bool Variable in der Klasse auf true bzw. false setzt. Nun wenn ich die Funktion normal aufrufe dan kann ich die Variable auch ganz einfach mit "Klassenname::Variable" abfragen, doch wenn ich nun die Funktion mit einem Thread ausführen lasse kann ich die Variablen nicht abrufen, ich mache das so:

    if (runThread_Sensor == nullptr) {	//Überprüfen ob schon gestartet
    							ThreadStart^ threadDelegate2 = gcnew ThreadStart( &Sensoren::Check_Sensor );
    							runThread_Sensor = gcnew Thread( threadDelegate2 );
    							runThread_Sensor->Start(); //Starten
    						}
    
    				 if (Sensoren::sensor_1 == true) {
    					 this->checkBox1->Checked = true;
    				 }
    				 if (Sensoren::sensor_2 == true) {
    					 this->checkBox2->Checked = true;
    				 }
    				 if (Sensoren::sensor_3 == true) {
    					 this->checkBox3->Checked = true;
    				 }
    				 if (Sensoren::sensor_4 == true) {
    					 this->checkBox4->Checked = true;
    				 }
    

    Hab ich hier einen Denkfehler oder sowas?

    Mfg. BNS



  • Push:

    Auch wenn ich versuche mit einem anderem Thread die Variablen abzufragen klappt es nicht.

    Bitte um Hilfe.

    Mfg. BNS



  • Ich sehe weder eine Fehlermeldung, noch ist mir klar ob das da oben jetzt der funktionierende Teil oder der fehlerhafte Teil ist.



  • Es gibt ja auch keine fehlermeldung, es ist nur eben so das wenn ich die Variablen mit einem Thread ändere beim Abfragen einfach den Standart wert kriege.



  • Ich habe mit THreads wenig erfahrung, aber kann es nicht sein, das jeder Thread seine eigenen statischen Variablen hat ?



  • Währe möglich da ich aber die Variablen in der Klasse in denen die Funktionen sind definiert habe und die Funktionen bzw. Threads in diese Schreiben und dann gegenseitig auf die Variablen in den verschiedenen Klassen zugreifen, nur das komische ist das wenn ich die Funktionen normal also nicht in einem Thread ausführe dann geht es!



  • Hab z.z. genau das selbe Problem, und suche eine Antwort drauf, weiß da einer was?



  • Ich poste hier nochmal den Code, vielleicht liegt es daran irgendwo.
    Nur sehe ich hier keinen Fehler!

    //Form Laden
    	private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
    				 inpout32::Load_Config();			//Laden der Konfiguration
    				 inpout32::Output(inpout32::output, inpout32::output_start); //LPT Ausgang auf 0-Setzen
    
    				 //Thread Sensoren
    					if (runThread_Sensor == nullptr) {	//Überprüfen ob schon gestartet, wenn nicht:
    						ThreadStart^ threadDelegate = gcnew ThreadStart( &Sensoren::Check_Sensor );
    						runThread_Sensor = gcnew Thread( threadDelegate );
    						runThread_Sensor->Start(); //Starten
    					}
    				//Thread Visuele Variablen
    					if (runThread_Sensor == nullptr) {	//Überprüfen ob schon gestartet, wenn nicht:
    						ThreadStart^ threadDelegate = gcnew ThreadStart( this, &Form1::Visual_Variable );
    						runThread_Visual = gcnew Thread( threadDelegate );
    						runThread_Visual->Start(); //Starten
    					}
    	}
    
    //Variablen Visualisieren
    	public: void Visual_Variable() {
    
    			//Alles auf Standart setzen
    				this->checkBox1->Checked = false;
    				this->checkBox2->Checked = false;
    				this->checkBox3->Checked = false;
    				this->checkBox4->Checked = false;
    				this->label9->Text	= "Aus";
    				this->label10->Text = "Aus";
    				this->label11->Text = "Aus";
    				this->label12->Text = "Aus";
    				this->label15->Text = "Aus";
    				this->label16->Text = "Aus";
    				this->label18->Text = "Vorwärts";
    				this->label20->Text = "Vorwärts";
    
    			//Motoren
    				if (Steuerung::motor1 == true) {
    					this->label15->Text = "An";
    				}
    				if (Steuerung::motor2 == true) {
    					this->label16->Text = "An";
    				}
    
    			//Sensoren
    				if (Sensoren::sensor_up == true) {
    					this->checkBox1->Checked = true;
    					this->label9->Text = "An";
    				}
    				if (Sensoren::sensor_back == true) {
    					this->checkBox4->Checked = true;
    					this->label10->Text = "An";
    				}
    				if (Sensoren::sensor_left == true) {
    					this->checkBox3->Checked = true;
    					this->label11->Text = "An";
    				}
    				if (Sensoren::sensor_right == true) {
    					this->checkBox2->Checked = true;
    					this->label12->Text = "An";
    				}
    
    			 //Richtung
    				if (Steuerung::motor1_route == true) {
    					this->label18->Text = "Vorwärts";
    				}
    				else {
    					this->label18->Text = "Rückwärts";
    				}
    
    				if (Steuerung::motor2_route == true) {
    					this->label20->Text = "Vorwärts";
    				}
    				else {
    					this->label20->Text = "Rückwärts";
    				}
    
    				//Thread Sleep
    				Thread::Sleep(inpout32::time_sensoren);
    
    	}
    
    	//Funktion zum starten des Parkout Threads
    	public: void Start_Threads() {
    
    			this->toolStripProgressBar1->Visible = true;
    			//Motoren Starten
    				Steuerung::Start();
    
    			//Threads starten
    				//Thread Parkour
    					if (runThread_Parkour == nullptr) { //Überprüfen ob schon gestartet, wenn nicht:
    						ThreadStart^ threadDelegate = gcnew ThreadStart( &Parkour::Parkour_Run );
    						runThread_Parkour = gcnew Thread( threadDelegate );
    						runThread_Parkour->Start(); //Starten
    						Parkour::run_parkour = true;
    					}
    
    			//Button- "Automatische Steuerung" ändern
    					this->button1->Text = "Beenden";
    	}
    
    	//Funktion zum Beenden der Threads
    	public: void Stop_Threads() {
    
    			this->toolStripProgressBar1->Visible = false;
    
    			//Threads beenden
    				//Thread Parkour
    					if (runThread_Parkour != nullptr) { //Überprüfen ob schon gestartet, wenn ja:
    						runThread_Parkour->Abort(); //Stoppen
    						Parkour::run_parkour = false; //Variable für Parkour Schleife zurückseten
    						runThread_Parkour = nullptr; //Variable für Thread zurücksetzen
    					}
    			//Button- "Automatische Steuerung" ändern
    					this->button1->Text = "Starten";
    	}
    


  • Hab nun den Fehler gefunden, und zwar wird die Funktion nur einmal ausgeführt beim Start des Programms so wie es auch soll, aber danach nicht mehr obwohl die funktion in einem thread liegt!


Anmelden zum Antworten