Auf eine Tastatureingabe oder auf eine Variablenänderung reagieren

july

Erfahrenes Mitglied
Hallo zusammen,

ich hab eine Frage. Hat jemand eine Idee wie man in einem Thread eine Schleife auf Grund der gleichzeitigen Abfrage nach Tastatureingabe oder Überprüfung nach Variablenänderung von ausserhalb erzeugen kann. Also ich muss quasi überprüfen, ob eine Tastatureingabe erfolgte oder der Wert einer bestimmten Variablen sich geändert hat und wenn dass der Fall ist, darf sich ein gewisser Ablauf wiederholen.

Grüße July
 
Hi

Für die Tastatur: kbhit prüft, ob eine Taste gedrückt wurde, ohne diese einzulesen.
Variablenänderung: Alten Wert speichern und regelmäßig vergleichen. Threadsafe-Sachen nicht vergessen.

Gruß
 
Das ist jetzt meine Lösung. Ehrlich gesagt begeister von ihr bin nicht! Falls ihr eine perfomantere habt, bitte posten!
C++:
void * update (void *choice)
{
.....
do{
    if(kbhit())
      {
        cin >> choice;
        update(choice);
        break;
      }
    else if(anz_update==1)
      {
        update(choice);
        break;
      }
 }while(1);
}
 
Zuletzt bearbeitet von einem Moderator:
Ohne zu wissen, was dein Programm eigentlich macht, was update/choice/anz_update etc. ist, kann dir da wohl keiner helfen.

Warum rufst du update in update auf?
Wenn anz_update 1 wird bekommst du einen Stack Overflow.

Was ist die Variable, die sich ändert?
anz_update?
Wo ist dann die Absicherung für gleichzeitige Zugriffe?
 
na ja die Methode dient zur Darstellung einer Anzeige, also wenn der Benutzer iwas eintippt oder intern was neues passiert (verändert anz_update), was zu der Veränderung der aktuellen Anzeige führt, muss ich drauf reagieren.
 
anz_update wird also aus einem anderen Thread heraus verändert.
Sheel hat gesagt.:
Warum rufst du update in update auf?
Wenn anz_update 1 wird bekommst du (deswegen) einen Stack Overflow.

Wo ist die Absicherung für gleichzeitige Zugriffe? (bei anz_update)
 
Warum rufst du update in update auf?
weil ich mit dem Thread(in diesem Fall einem bestimmten Fenster) weiter arbeiten möchte und keine Lust auf 20.000 neue Fenster hab. Und so wird die Oberfläche nur mit den aktuellen Werten aktualisiert.
Wenn anz_update 1 wird bekommst du (deswegen) einen Stack Overflow.
Jep, hab jetzt das auch gesehen darum hab ich gerade den Code schon angepasst.
C++:
void * update (void *choice)
{
.....
do{
    if(kbhit())
      {
        cin >> choice;
        break;
      }
    else if(anz_update==1)
      {anz_update = 0;
        break;
      }
Sleep(100)
 }while(1);
update(choice);
}

Wo ist die Absicherung für gleichzeitige Zugriffe? (bei anz_update)
da arbeite ich gerade dran
 
Zuletzt bearbeitet von einem Moderator:
Jetzt bekommst du erst recht einen Stack-Overflow.
Und das Sleep zögert ihn nur hinaus.
Der Speicher wird totzdem zugemüllt, nur langsamer.

Reicht die while(1)-Schleife nicht, um den Thread am Leben zu halten?
Weg mit den breaks und fertig.
 
Reicht die while(1)-Schleife nicht, um den Thread am Leben zu halten?
Weg mit den breaks und fertig.

nein reicht nicht, weil nur die Tastatureingabe und die Variable sind die Bedingung um die Oberfläche neuaufzubauen. Und wenn ich alles in while(1) einschließe wird's nur flackern und nicht lesbar sein.
 
Ich versteh dich nicht.
Ob du jetzt eine Endlosschleife oder eine endlose Rekursion hast, was ändert das an der GUI?
Da Draw oder was auch immer nicht in diesem Thread ist, sollte es gar nichts ändern.

Und noch einmal: Eine Endlosrekursion ist kein Allheilmittel, sondern ein weiteres Problem.
 
Zurück