24.04.2009, 08:43
Beitrag #1
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
"Race-Conditions"?! vermeiden/beheben
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
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
24.04.2009, 08:55
Beitrag #2
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
"Race-Conditions"?! vermeiden/beheben
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
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
24.04.2009, 08:57
Beitrag #3
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
"Race-Conditions"?! vermeiden/beheben
Habe nur eine Netzwerkkarte!
Mit 50 ms läuft es fehlerfrei!
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
24.04.2009, 09:22
Beitrag #4
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
"Race-Conditions"?! vermeiden/beheben
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?
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
24.04.2009, 10:34
Beitrag #5
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
"Race-Conditions"?! vermeiden/beheben
Kannst Du Dein Projekt (oder ein kleines Bsp.-Projekt, wo man sieht, was Du genau machst) hochladen?
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
24.04.2009, 10:37
Beitrag #6
|
|
|
24.04.2009, 10:47
Beitrag #7
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
"Race-Conditions"?! vermeiden/beheben
Das klingt nach einer guten lösung!
Vielen Dank. Rein fürs Interesse erstelle ich gleich mal ein kleines Beispielprojekt. nach der Mittagspause!
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
24.04.2009, 12:27
Beitrag #8
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
"Race-Conditions"?! vermeiden/beheben
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:
TestProjekt.zip (Größe: 17,59 KB / Downloads: 232)
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
24.04.2009, 13:12
Beitrag #9
|
IchSelbst
LVF-Guru
Beiträge: 3.696
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
"Race-Conditions"?! vermeiden/beheben
' 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.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
| |