Run in UI-Thread in 8.5 - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: DLL & externer Code (/Forum-DLL-externer-Code) +---- Thema: Run in UI-Thread in 8.5 (/Thread-Run-in-UI-Thread-in-8-5) |
Run in UI-Thread in 8.5 - HarryPython - 24.01.2008 18:11 Hallo. Ich erstelle mit LabVIEW eine dll. Nun ist es wichtig, dass ich diese in meinem Python Programm mehrfach nutzen kann. Ich weiß, dass man UI-Thread beim erstellen einer dll einstellen konnte. Das stand sonst immer neben dem Funktionsnamen. Bin gerade auf LabVIEW 8.5 umgestiegen und nun ist diese Einstellung wech. Kann mir da jemand Helfen? Gruß HP Run in UI-Thread in 8.5 - Y-P - 24.01.2008 20:03 Komisch, bei mir gibt's das noch (vgl. Screenshot), aber darüber was das bedeutet und wie das mit den DLLs sonst so funktioniert weiß ich so gut wie nichts. Gruß Markus [attachment=10807] ' schrieb:und nun ist diese Einstellung wech. Run in UI-Thread in 8.5 - HarryPython - 25.01.2008 09:04 Hi Markus. Danke für deine schnelle Antwort. Bei mir sieht das allerdings so aus: [attachment=10814] Kannst du mir sagen wie du zu dem Fenster gekommen bist? Ich geh im Projekt Explorer auf Build-Spezifikationen -> Neu -> DLL -> Quelldateien. Wenn ich dann mein VI von "Projektdateien" in "Exportierte VIs" ziehe, kommt das Fenster. Gruß HP Run in UI-Thread in 8.5 - jg - 25.01.2008 09:57 Markus hat das Fenster beim IMPORT einer dll-Funktion in LV (Konfiguration der Call Library Node) hier hochgeladen... MfG, Jens Run in UI-Thread in 8.5 - rolfk - 25.01.2008 10:18 ' schrieb:Hallo. Du musst da etwas durcheinander bringen. Nicht die Funktion selber bestimmt in welchem Thread sie ausgeführt wird sondern der Aufrufer davon. Das ist immer schon so gewesen und die Funktionsprototypkonfiguration hat damit nichts zu tun! Wenn Du willst dass ein VI in einer DLL im UI Thread ausgeführt wird wirst Du schon das VI selber unter File->VI Properties vor dem DLL Build entsprechend konfigurieren müssen um im UI Thread zu laufen. Rolf Kalbermatter Run in UI-Thread in 8.5 - HarryPython - 25.01.2008 10:57 Hi @ Jens: Ok, dann gibt es das Fenster wohl nur beim LV dll import. Dachte sowas gibt es dann auch beim Export. Mein Fehler. @ Rolf: Ich möchte von, den in der dll enthaltenen Funktionen, mehrere Instanzen in meinem Python Programm erzeugen. Bei der Ausgabe von meinen Python Programm Daten sieht das aber so aus, als würde nur eine Instanz erstellt werden. Daher will ich gerade prüfen ob meine dll Thread safe ist oder nicht. Bim Erzeugen der dll hab ich darauf nicht geachtet. Meinst du diese Einstellungen: [attachment=10820] Ich hab mir die Hilfe dazu mal durchgelesen aber leider nicht ganz verstanden ob sie damit das Aufrufen von einem externen Programm meinen. Gruß HP Run in UI-Thread in 8.5 - rolfk - 25.01.2008 11:12 ' schrieb:Hi Ja das meine ich und ist absolut unabhängig davon ob das VI aus LabVIEW direkt aufgerufen wird oder innerhalb der Runtimeumgebung von einem DLL Funktionswrapper. Aber ich denke mal dass Du ein prinzipielles Problem hast hier. Wenn Du eine Funktion mehrmals parallel aufrufen willst, willst Du gerade nicht, dass diese automatisch in den UI Thread gezwungen wird. Dann wird der Aufrufer für den zweiten und dritten Aufruf nämlich blockiert bis der erste Aufruf beendet ist. Das kann nicht anders. Bleibt auch noch die Frage ob den Python so einfach mehrere Threads möglich macht. Solange Deine aufrufende Umgebung nur einen Thread hat macht es eh nichts aus wie die DLL konfiguriert ist. Was Du mit mehreren Funktionsinstanzen meinst ist mir auch nicht deutlich. Funktionen sind nicht Objekte die man instantieren kann. Funktionen kann man aufrufen (eventuel mehrmals parallel) und die kehren irgendwann mal wieder zurück. Ob man sie mehrmals gleichzeitig aufrufen kann hängt nur davon ab ob sie reentrant sind. Und das ist eine Funktion abhängig davon ob sie nur lokale Variablen haben (dann sind sie reentrant) oder aber auch auf globale Resourcen zugreifen (File IO, Hardware ganz allgemein, globale Variablen und dergleichen). In dem Fall sind sie entweder protected (ein Semaphore oder so verhindert den gleichzeitigen Zugriff auf die globale Resource bei Mehrfachaufrufen) oder single threaded (der Aufrufer ist selber dafür verantwortlich um die Funktion nicht mehrmals parallel aufzurufen). So wie es mir scheint hast Du bis jetzt entweder die Begriffsterminologie noch nicht so ganz korrekt, oder das Verständnis von Multithreading ist nicht korrekt oder beides davon. Rolf Kalbermatter Run in UI-Thread in 8.5 - HarryPython - 25.01.2008 12:24 Hi Rolf. Danke für die schnelle Antwort. Hab die Einstellung gleich mal getestet und sie läuft!!! Ich erstelle in Python so viele Threads wie ich Messkanäle an meinem Messgerät hab. In jedem dieser Threads erstelle ich dann eine Instanz der dll. Somit hab ich für jeden Kanal die Funktion "Auslesen" aus meiner dll. Ist leider etwas unverständlich rüber gekommen. Gruß HP Run in UI-Thread in 8.5 - HarryPython - 25.01.2008 14:36 So. Nun hab ich genau das Problem was auch in der Hilfe beschrieben wird. Ich gebe meine Messwerte mit Hilfe von globalen Variablen an ein anderes VI. Ich kann zwar Instanzen von der dll erstellen aber die globalen Variablen gibt es nur einmal. Gibt es also eine andere Möglichkeit Daten zwischen VI's auszutauschen? Danke Gruß HP |