INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Kommunikation zweier separater Programme



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

14.09.2007, 09:05 (Dieser Beitrag wurde zuletzt bearbeitet: 14.09.2007 09:08 von rolfk.)
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Kommunikation zweier separater Programme
' schrieb:2 while schleifen hatte ich schon....mit queue hab ich da aber net gearbeitet....da haben glaub ich beide schleifen während der dll-angehalten...wenn ich mich recht entsinne hab ich noch nie mit queue gearbeitet...muss ich mal beispiele durchforsten

kann nun mit meiner umständlichen methode auf 50ms genau arbeiten.

danke für den tip...ich ziehs mal in betracht

Also LabVIEW ist inherent multithreading und hat damit prinzipiel keine Probleme. Aber es gibt schon ein paar Dinge zu beachten. Ein DLL Aufruf kann entweder reentrant laufen oder im UI thread. Reentrant bedeutet dass LabVIEW ihn innerhalb des aktuellen Diagramms in einem der zur Verfügung stehenden Threads laufen lassen kann und das sind seit LabVIEW 8 doch schon mal so ungefähr 4 pro Execution System (ein VI und damit Diagramm kann einem von 5 oder so Execution Systems zugeordnet werden). Default ist dasselbe Execution System als das aufrufende VI.

Bei DLLs gibt es aber einen Haken. Bei schlecht, schluffig, oder was auch immer programmierten DLLs kann es Probleme geben wenn diese reentrant aufgerufen werden, entweder weil sie mit globalen Variablen arbeiten die sich bei mehreren gleichzeitigen Aufrufen gegenseitig beeinflussen oder weil sie auf irgendeine Weise threadspezifische Information verwenden und nicht damit leben können von verschiedenen Threads aufgerufen zu werden. In dem Fall muss man die Call Library Node eben so konfigurieren, dass die DLL im UI Thread aufgerufen wird, da das der einzige Thread in LabVIEW ist der garantiert immer derselbe bleibt innerhalb einer LabVIEW Session.

Nun ist aber der UI Thread wie der Name schon sagt auch zuständig für das Updaten des User Interfaces und zudem werden ein paar andere Dinge wie etwa Property Nodes aus sicherheitstechnischen Gründen in diesem Thread ausgeführt.

Die Moral von der Geschicht: Wenn Du die DLL reentrant aufrufen kannst dann Du es. Wenn das crasht, oder unerklärliche Phanomene produziert musst Du sie eben im UI Thread laufen lassen. Dann musst Du aber dafür Sorge tragen, dass in anderen Loops die parallel laufen keine Frontpanelelemente geudated werden die ein synchrones Update ausführen (default ist asynchon) und auch keine Property Nodes sind, und auch keine anderen DLLs (oder CINs) die nicht reentrant sind (orange Hintegrundfarbe statt lichtgelber).

Und natürlich müssen alle Loops die parallel laufen sollen immer entkoppelt sein. Das heisst kein Verbindungsdraht von der einen Loop in die andere. Wenn Kommunikation zwischen solchen Loops nötig ist muss das auf andere Weise geschehen (in absteigender Folge der Bevorzugung): Queues, LV2 style globals, Interprocess Kommunikation (shared memory, Netzwerk, DDE/Apple Events, etc), lokale Variablen, oder globale Variablen.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
Kommunikation zweier separater Programme - rolfk - 14.09.2007 09:05

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Zeiterfassung zweier Lichtschranken Dsans 12 6.090 26.10.2022 12:10
Letzter Beitrag: Dsans
  Vergleich zweier Zahlen LabViewPete 13 11.152 27.10.2020 12:52
Letzter Beitrag: THL
  Ansteuerung zweier Heizer mittels PID-Regler Christoph1993 2 3.096 25.11.2018 19:53
Letzter Beitrag: Christoph1993
  Kopplung zweier Ereignisse TTT 4 4.146 25.07.2018 15:49
Letzter Beitrag: TTT
  Programme für unterschiedliche Hardware gestalten MaxP 2 3.113 29.11.2017 09:30
Letzter Beitrag: MaxP
  Vergleich und Neusortierung zweier Arrays domdom 6 5.319 30.11.2016 09:13
Letzter Beitrag: domdom

Gehe zu: