' schrieb: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=37878:2008_01_25_084809.jpg]
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
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