mal wieder parallele Schleifen...
Was fuer eine Variante zum beenden von Schleifen die auf Queueelemente warten nehmt ihr ?
A) Ein Stopcommand im Mainloop wird an alle parallelen Schleifen ueber eine lokale Variable uebertragen. Dazu muss man ja dann unbedingt einen Timeoutwert bei allen "Dequeue Element"-Schleifen haben, sonst wuerde diese Stop ja nicht gelesen werden, weil das Programm bei Dequeue Element haengt.
B) Lokale Variablen sind ja verpoent, also schickt man das Stopsignal an jede Queue. Man muss ja fuer jede Schleife eine Queue haben, da das erste "Dequeue Element" das Ereignis aus der Queue wegnimmt und die anderen Schleifen es dann nicht mehr mitbekommen
C) Einen gemeinsamen Run/Stop Notifier, damit man nicht an jede Queue extra das Ereignis schicken muss. Auch hier braucht man natuerlich einen Timeout fuer den Notifier, denn wenn dieser auf 'Run" steht, wuerde alles danach haengen, weil "Wait on Notifier" auf eine Aenderung im Notifier wartet. Diese kommt aber erst, wenn "Stop" gesendet wird. Ein Timeout fuer die Queue ist auch wichtig, denn wenn gerade nichts in der Queue ist und "Dequeue Element" also wartet kann ja nicht auf den Stop Notifier reagiert werden.
Wahrscheinlich ist es sinnvoll immer Timoeouts zu verwenden, wenn man mit Queues und Notifiern arbeitet.
D) Etwas bessers und schlaueres. Wenn ja was?
VVI mit parallelen Loops u. Queues beenden - wie macht ihrs?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: VVI mit parallelen Loops u. Queues beenden - wie macht ihrs?
D !
Einfach: Queue in der Main Loop zerstören und Error Cluster in der jeweiligen Loop an Schleife Beenden anschliessen.
Komplex: Queue vom varianten Typ machen (z.B. Variant oder String) und die Aktion im Paket mitübergeben. Z. B. eine Aktion "Data" und die andere "Stop".
Einfach: Queue in der Main Loop zerstören und Error Cluster in der jeweiligen Loop an Schleife Beenden anschliessen.
Komplex: Queue vom varianten Typ machen (z.B. Variant oder String) und die Aktion im Paket mitübergeben. Z. B. eine Aktion "Data" und die andere "Stop".
-
- assistant
- Сообщения: 132
- Зарегистрирован: 26 окт 2009, 23:05
- Версия LabVIEW: 7.1
- Контактная информация:
Re: VVI mit parallelen Loops u. Queues beenden - wie macht ihrs?
Ok, "Einfach" ist echt schlau :)
aber Was ist der Unterschied von deiner komplexen Variante zu meinem B ? :)
(angemerkt: anstannt eines varianten Typs kann man doch auch einen Cluster nehmen oder?)
Verwendest du dann keine Timeouts wenn du mit Queues arbeitest? Braucht man ja eigentlich dann nicht, wenn man mit der "zerstoeren" - Variante arbeitet.
aber Was ist der Unterschied von deiner komplexen Variante zu meinem B ? :)
(angemerkt: anstannt eines varianten Typs kann man doch auch einen Cluster nehmen oder?)
Verwendest du dann keine Timeouts wenn du mit Queues arbeitest? Braucht man ja eigentlich dann nicht, wenn man mit der "zerstoeren" - Variante arbeitet.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: VVI mit parallelen Loops u. Queues beenden - wie macht ihrs?
Stimmt, kein Unterschied. Cluster geht auch, nur wenn du viel zu viele Datentypen (Signale) hast, werden dein Cluster und die Datenmenge riesig groß.Andband писал(а):Ok, "Einfach" ist echt schlau :)
aber Was ist der Unterschied von deiner komplexen Variante zu meinem B ? :)
(angemerkt: anstannt eines varianten Typs kann man doch auch einen Cluster nehmen oder?)
Nein, ich verwende keine Timeouts, wozu eigentlich?Andband писал(а): Verwendest du dann keine Timeouts wenn du mit Queues arbeitest? Braucht man ja eigentlich dann nicht, wenn man mit der "zerstoeren" - Variante arbeitet.
-
- assistant
- Сообщения: 132
- Зарегистрирован: 26 окт 2009, 23:05
- Версия LabVIEW: 7.1
- Контактная информация:
Re: VVI mit parallelen Loops u. Queues beenden - wie macht ihrs?
Bringt da ein varianter Datentyp einen Vorteil :) ? Wenn ich wirklich viele Datentypen uebertragen muss, dann macht das eine Boolsche-Element im Cluster das Kraut schaetzungsweise auch nicht mehr fettStimmt, kein Unterschied. Cluster geht auch, nur wenn du viel zu viele Datentypen (Signale) hast, werden dein Cluster und die Datenmenge riesig groß.
Jo hast Recht, man kriegt eigentlich wahrscheinlich wirklich alles irgendwie ohne Timeouts hin.Nein, ich verwende keine Timeouts, wozu eigentlich?
hm...
Was waere wenn eine Schleife ordentlich schnell Messwerte sampled und jeden z.B. in eine Datei schreibt.
Und in dieselbe Datei aber auch noch Daten aus einer langsamen RS232-Daten-Schleife mit aufgezeichnet werden sollen? Wenn kein neuer Wert da ist, soll der von zuvor genommen werden.
Wie macht man denn z.B. das ohne Timeout und ohne lokale Variablen?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
- assistant
- Сообщения: 132
- Зарегистрирован: 26 окт 2009, 23:05
- Версия LabVIEW: 7.1
- Контактная информация:
Re: VVI mit parallelen Loops u. Queues beenden - wie macht ihrs?
Jo..war wohl ein Denkfehler meinerseits. Der wert von der RS232 Schleife steht ja solange im Notfier bis ein anderer 'kommt'. Insofern kann man in der schnellen Schleife den Notifier ja so oft lesen wie man will.
Danke mal wieder! :)
Danke mal wieder! :)