Problem bei Loop-Funktion (C++/CLI)

Andrej85

Mitglied
Hi Leute,

ich habe folgendes Problem:

Ich habe einen Button mit dem Text "loop Read". Wenn ich diesen Button klicke dann ändert sich der Text in "Stop". Soweit so gut.

Mein Problem ist nur dass wenn man den Button betätigt dann soll ein String mit Inhalt "#start_read" gesendet werden, und zwar solange bis ich wieder den Button betätige. Ich arbeite da mit einer while Schleife und nachdem man den Button 1 mal drückt und das programm in diese while Schleife reinspringt, danach stürzt alles ab.

Kann mir da jemand helfen?

Hier ist der Code dazu:

Code:
private: System::Void loop_read_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) 
		 {
			 int LOOP_ON = 0;
			
			 if ( ! onStart )										//Text changed on button click
			 {
			 	 LOOP_ON = 0;
			 	 this->loop_read->Text = L"loop Read";		
			 }

			 else
			 {
				 LOOP_ON = 1;
				 this->loop_read->Text = L"Stop";
				 while(LOOP_ON == 1)
				 {
					 client_proto->send("#start_read", false);
				 }
			 }

			 onStart ^= 1;
		 }


Gruß Andreas
 
Hallo,

, danach stürzt alles ab.
Das heißt vermutlich das dein Programm nicht mehr reagiert? Das passiert dir deswegen, weil du im Hauptthread eine Schleife laufen lässt, somit wird die loop_read_MouseClick-Funktion nie verlassen. Und da der Thread beschäftigt ist kann er auch keine weiteren Eingaben (weitere Clicks) verarbeiten. Das erkennt dann Windows und teilt dir mit das dein Programm nicht mehr reagiert.
Wenn du sowas bauen willst musst du das Senden in einen anderen Thread auslagern.
 
Das passiert dir deswegen, weil du im Hauptthread eine Schleife laufen lässt, somit wird die loop_read_MouseClick-Funktion nie verlassen. Und da der Thread beschäftigt ist kann er auch keine weiteren Eingaben (weitere Clicks) verarbeiten. Das erkennt dann Windows und teilt dir mit das dein Programm nicht mehr reagiert.

Ja soweit habe ich es auch analysieren können.

Wie meinst du das
Wenn du sowas bauen willst musst du das Senden in einen anderen Thread auslagern
****
 
Hallo,

Du musst einen neuen Thread starten, in welchem du in einer Schleife sendest. Wenn die Schleife in einem anderen Thread läuft blockiert dein Haupt-Thread nicht mehr.

Ich würde mit aber zusätzlich überlegen, ob es sinnvoll ist andauernd zu senden, oder ob es auch reicht wenn man z.B.: alle 100ms sendet.
 
Ich denke auch, dass man wahrscheinlich nicht ununterbrochen senden muss. Dann könnte man diese Funktionalität nämlich mit einen Timer erledigen und auf den Thread verzichten.

Gruß
MCoder
 

Neue Beiträge

Zurück