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 

VI mit externer DLL macht kein Multithreading



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!

04.12.2009, 07:57 (Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2009 07:59 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
VI mit externer DLL macht kein Multithreading
' schrieb:Genau: Welches musst du nehmen, damit die DLL mehrfach aufgerufen respektive der DLL-Knoten abgearbeitet werden kann. Das weiß ich nicht, hab ich vergessen, hab ich erst einmal gebraucht. Aber mein Vorredner kann dir sagen, was du brauchst.

:DIch denke die Namensgebung sollte da doch schon sehr deutlich sein!

Im UI Thread (beachte das Fehlen eines Plural s am Ende) ausführen bedeutet doch in dem EINEN, SPEZIELLEN Thread, und da es davon eben nur EINEN gibt kann jeweils nur EINE Sache gleichzeitig laufen. Ob das jetzt User Interface Updates sind, aufrufen von Threadunsafen OS Funktionen, oder halt Deiner DLL Funktionen macht nichts aus.

In beliebigem Thread ausführen, bedeutet dann dass die entsprechende Funktion in jedem beliebigen Thread ausgeführt werden darf. Das heisst ganz egal in welchen Thread LabVIEW in dem Moment im VI ist, die Funktion darf ohne Umschweife aufgerufen werden. Und da LabVIEW per Execution System mit Thread Pools arbeitet, bedeutet das halt das innerhalb eines VIs mehrer Code Teile in verschiedenen Threads sein können (je nach LabVIEW Version und Anzahl CPU Cores glaube ich bis zu 16 derzeitig.

Das heisst wenn Du die Call Library Nodes alle in ein VI setzt (mich verwirrt aber der Ausdruck dass die da in einen Case kommen darum meine Frage um ein Beispiel) muss dieses VI ablaufinvariant sein UND alle Call Library Nodes müssen gleichzeitig auf "in beliebigem Thread ausführen" eingestellt sein. Sowohl "nicht ablaufinvarientes VI" als auch "im UI auszuführende Call Library Nodes" serialisieren unabhängig voneinander jede für sich den Aufruf in die DLL.

Nun noch ein Tipp im Zusammenhang mit der erwähnten Case Struktur. Wenn das jetzt so ist wie ich es mir denke, hast Du da ein VI mit einer Case Struktur und in jedem Case eine bestimmte Call Library Node um eine Funktion aufzurufen. Warum? Mach doch einfach ein VI pro Call Library Node. Das ist viel logischer in der Benützung und macht die Einstellung der Ablaufvarianz eines VIs schon mal etwas weniger kritisch. Denn typisch will man Operationen wie Open und Close gar nicht mal ablaufinvarient ausführen. Das bringt nähmlich in den meisten Fällen rein gar nichts ausser einer Chance um unangenehme Race Conditionen zu provozieren. Wo man hingegen bei der Kommunikation mit mehreren Geräten viel gewinnen kann, ist wenn entsprechende Read und Write Operationen ablaufinvarient ausgeführt werden können.

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
VI mit externer DLL macht kein Multithreading - rolfk - 04.12.2009 07:57

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Aufruf externer Bibliotheken / Keyence / Schnittstelle _Markus_ 1 6.302 20.05.2019 12:23
Letzter Beitrag: _Markus_
  LabView Wrapper - PostUserEvent aus externer DLL Stephan235 3 10.413 22.07.2015 13:28
Letzter Beitrag: rolfk
  Einbinden externer DLL St_Markus 1 6.868 28.05.2013 15:25
Letzter Beitrag: rolfk
  VI als externer Code finalr 1 5.000 23.11.2012 08:58
Letzter Beitrag: GerdW
  Array Elemnte von externer Funktion verbinden Heili 3 5.324 12.11.2010 13:54
Letzter Beitrag: Lucki
  Debugging externer DLL Tom_UniMainz 4 8.680 22.07.2009 07:31
Letzter Beitrag: rolfk

Gehe zu: