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!
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
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