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!

03.12.2009, 19:05
Beitrag #1

wernerIBN Offline
Datenflussumgeher
**


Beiträge: 124
Registriert seit: Sep 2009

8.6 und 2011
2000
DE

52425
Deutschland
VI mit externer DLL macht kein Multithreading
Ich habe eine Reihe von VIs erstellt, die eine von mir VS2005 erstellte C-DLL aufrufen, in welche ich threadsicher Funktionen erstellt habe, um über winsock mit Messgeräten zu kommunizieren. Es gibt da 4 Funktionen, im Prinzip open-send-read-close. Im VI führe ich immer diese 4 Funktionen aus. Jedes Gerät hat eine Verbindungsnummer, über die ich in der DLL auf Verbindungsdetails (Port, IP-ADresse etc) über ein Array zugreife. Also können mehrere dieser Zugriffe gleichzeitig, also in C in verschieden Thread laufen, ohne sich gegenseitig zu beeinflussen.

In LabVIEW stelle ich nun fest:
Gerät 1 benötigt fürs VI 100ms
Gerät 2 benötigt fürs VI 200ms
Gerät 3 benötigt fürs VI 100ms
Gerät 4 benötigt fürs VI 300ms

wenn ich die VIs einzeln aufrufe.

Wenn ich alle 4 VIs in einen Case stelle, ohne irgendwelche Verbindungen zueinander, dauert der gesamte Case 700ms - also als ob die VIs nacheinander laufen. das verstehe ich nicht. Gehe ich richtig in der Annahme, dass 4 VIs in einem Case, die nicht irgendwie verbunden sind, parallel abgearbeitet werden sollten ?

Ich vermute mal, das LabVIEW sieht, in allen 4 VIs werden jeweils die 4 DLL-Funktionen open-send-read-close aufgerufen, und die sind natürlich in jedem einzelnen VI sauber mit dem Error-Cluster durchverkabelt, also verbunden. Aber es können gleichzeitig 4 VIs open aufrufen, aber LV machts nicht.

Darauf hin habe ich an folgenden Einstellungen gedreht, aber keine echte Erkenntniss gewonnen, was genau da passiert:

Frage 1:
VI-Eigenschaften -> Ausführung -> Ablaufinvariante Ausführung an oder aus

Was genau macht das, bringt mich das näher an meine Ziel der parallelen Ausführung ?

Frage 2:
Knoten zum Aufruf externer Bibliotheken -> In UI-Thread ausführen oder In beliebigem Thread ausführen

Ich habe den Eindruck, dass sich ausser der Farbe nichts ändert, es dauert immer 700ms.

Werner

Erfahrung ist die Summe der gemachten Fehler
KISS - Keep it simple and stupid
Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
VI mit externer DLL macht kein Multithreading - wernerIBN - 03.12.2009 19:05

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

Gehe zu: