LabVIEWForum.de - "Race-Conditions"?! vermeiden/beheben

LabVIEWForum.de

Normale Version: "Race-Conditions"?! vermeiden/beheben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Moin zusammen,

ich habe zwei VIs:

1. In einem Event-Case wird auf Knopfdruck eine Umgebungsvariable gesetzt (auf den Wert des Buttons). Nach dem Setzen wird eine Meldung gesendet.

2. Es wird auf eine Meldung gewartet. Sobald sie eintrifft, wird der Wert der Umgebungsvariable angezeigt.

Starte ich die VIs so zeigt mir das zweite VI grundsätzlich den falschen Wert an (also den Wert vor dem Buttonklick). Starte ich dagegen mit eingeschalteter Highlightfunktion, so funktioniert alles so wie es soll. Ich habe auch schon eine Wartezeit von einer Sekunde nach der "Auf Meldung warten"-Funktion eingebaut, dann läuft es korrekt.

Ist es also tatsächlich so, dass eine Umgebungsvariable soo langsam geschrieben wird, dass in der Zeit eine Meldung vertschickt und empfangen werden kann und was ich noch erstaunlicher finde, dass der Wert der Umgebungsvariable ausgelesen werden kann, obwohl ein andere Prozess grade den neuen Wert schreiben sollte???

LG
Torsten
Hast Du 2 Netzwerkkarten in Deinem Rechner? Wenn ja, dann deaktiviere mal eine davon.
Wenn nein, dann schraub' die Wartezeit mal auf z.B. 50 ms zurück. Geht's dann auch noch?

Gruß Markus
Habe nur eine Netzwerkkarte!

Mit 50 ms läuft es fehlerfrei!
Aber mir wäre es lieber wenn man da keine pause machen müsste. also wer garantiert mir denn, dass 50 ms ausreichen und nciht irgendwie mal noch andere prozesse die cpu brauchen und sich die wartezeit erhöhen müsste?
Kannst Du Dein Projekt (oder ein kleines Bsp.-Projekt, wo man sieht, was Du genau machst) hochladen?

Gruß Markus
' schrieb:1. In einem Event-Case wird auf Knopfdruck eine Umgebungsvariable gesetzt (auf den Wert des Buttons). Nach dem Setzen wird eine Meldung gesendet.
2. Es wird auf eine Meldung gewartet. Sobald sie eintrifft, wird der Wert der Umgebungsvariable angezeigt.
In diesem Falle würde ich in der Meldung den Wert des Buttons mit schicken.
Das klingt nach einer guten lösung!

Vielen Dank. Rein fürs Interesse erstelle ich gleich mal ein kleines Beispielprojekt. nach der Mittagspause!
So, ich hab mal auf das wesentliche reduziert so dass der effekt erkennbar ist. Zuerst das Consumer.VI starten, dann das Main.vi.

Problem bei der vorhin vorgeschlagenen Lösung ist: ich möchte melden, wenn eine von vielen Variablen den wert ändert. in der anzeige sollen dann einfach alle variablen neu ausgelesen werden. mit dem vorschlag einfach den wert des buttons in die meldung zu integrieren komme ich daher nicht weiter, ich müsste dann ja noch zuordnen, welcher button aktualisiert wurde.

gezipptes projekt:
Lv86_img[attachment=17997]
' schrieb:Problem bei der vorhin vorgeschlagenen Lösung ist: ich möchte melden, wenn eine von vielen Variablen den wert ändert. in der anzeige sollen dann einfach alle variablen neu ausgelesen werden. mit dem vorschlag einfach den wert des buttons in die meldung zu integrieren komme ich daher nicht weiter, ich müsste dann ja noch zuordnen, welcher button aktualisiert wurde.
Ich habe kein Problem damit, alle Buttons per Melder zu verschicken.
' schrieb:also wer garantiert mir denn, dass 50 ms ausreichen und nciht irgendwie mal noch andere prozesse die cpu brauchen und sich die wartezeit erhöhen müsste?
Du verwendet hier für Status und Daten zwei verschiedene Wege. Beide Wege sind zu einander asynchron. Aber beide Wege haben eine Beziehung. Asynchron und Beziehung beißt sich: eine Beziehung muss immer synschon sein (asynchron => RaceCondition).
Seiten: 1 2
Referenz-URLs