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!

08.12.2009, 18:58
Beitrag #14

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
AAlso,
ich bin immer noch nicht schlauer.

Ich habe nun alles versucht, der SRC-Code unds LV-Projekt LabVIEW Version 8.61lv86liegen bei.

Versucht habe ich:

1.) CodeInterfaceNode "In UI-Thread ausführen" oder beliebigem Thread
2.) VI-Eigenschaften Ablaufinvariante Ausführung an oder aus
3.) Bevorzugtes System wie Aufrufer oder Standard.

Komplett gelesen habe ich:
Application Note 114 Using LabVIEW to Create Multithreaded VIs for Maximum Performance and Reliability von Norma Dorst
und
Using External Code in LabVIEW

Aber weitergekommen bin ich nicht.

Es ist leider umfangreich, das VI auf das es mir ankommt ist das TAE-Test-Dauertest.vi - zu finden im Ordner "Test VIs einzelner Geräte"
Darin laufen in einer For-Schleife 2 Sub-VIs (TAE-Test-PFG1000RF.vi und TAE-Test-PR4000.vi).
Jedes VI einzeln braucht 300ms.
Sollten parallel laufen, tun Sie aber nicht richtig, denn die For-Schleife benötigt 600ms.

Mit einem Port-Sniffer sehe ich, dass beide UDP-Pakete etwa zeitgleich losgehen (ca. 16ms auseinander) und auch zeitgleich kommen (nach 300ms).
Aber ich befürchte meine Empfangerei macht Mist.

Zu finden in der Datei TCPIP.cpp und zwar in der Funktion:

DLL_FUNC int winsock_recvbinary(int nDeviceNumber, char* cData, int* nLen, int nBufSize,
int nTimeOutms, LPDWORD lpdwDuration, char* szAbsender)

Wie gesagt, ich mach UDP, und da gibt es eine Variable "lpdwDuration", mit der ich messe, wie lange es dauert, bis ich die Nachricht empfangen habe.

Wenn ich im CodeInterfaceNode den Parameter auf "In UI-Therad ausführen" habe, dann stimmen die angezeigten Zeiten.
Klar, weil ja beide VIs brav hintereinander ausgeführt werden, nehm ich an.
Wenn ich aber "in beliebigem Thread ausführen" anhabe, dann zeigt die Variable "lpdwDuration" komischerweise die 600ms an, die es auch insgesamt dauert.

Da ist also was faul: denn ich hol mir die Zeit ja per GetLocalTime() und merke mir die in lokalen Variablen, und da hier 2 Threads diese Funktion gleichzeitig aufrufen, sollten Sie doch auch gleichzeitig fertig werden. Sehr komisch.

LV-Projekt und C-Source der TCPIP Sachen liegt als ZIP bei.

Werner


Angehängte Datei(en)
Sonstige .zip  HiK.zip (Größe: 1,52 MB / Downloads: 218)

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
Antwort schreiben 


Nachrichten in diesem Thema
VI mit externer DLL macht kein Multithreading - wernerIBN - 08.12.2009 18:58

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.678 22.07.2009 07:31
Letzter Beitrag: rolfk

Gehe zu: