Deutsch
Forum

DLL gleichzeitig mit Profan-Prog nutzen

 

Jac
de
Lad
Hallöchen, ich hab mal wieder ne komplizierte Fräge:

Ich will ein Prog schreiben, dass geleichzeitig einen komplexen Befehl einer DLL startet und aber noch weiterläuft, geht das? Ich habs mit der Thread.pcu versucht, klappt nicht. Jetzt hab ich nur noch als letzte Rettung, dass die Funktion der DLL, die ich aufrufe einen Thread kreiert, dieser dann eine andere Funktion der DLL aufruft, die was auch immer komplexes unternimmt und sich dann mit einem Rückgabewert beendet (während die komplexe Funktion noch werkelt). Das Prog bekommt den Rückgabewert (und die DLL ist immer noch am werkeln über die zweite Funktion), und kann weitermachen...wisst ihr was ich meine?

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
15.01.2006  
 



Ich denke mal nicht, das die Speicherverwaltung der Profan-Runtime Thread sicher ist, so das dort viel durcheinander gewirbelt werden könnte. Zumindestens müßtest Du CriticalSections (findeste in MSDN) definieren.
Die DLL arbeitet ja im Adreßraum Deines Programmes. Speicheradressen ändern sich, weil z.B. ein String grösser wird usw.
Kannste es ja probieren, aber ich denke mal, es wird nicht sicher funktionieren.
 
15.01.2006  
 




Jac
de
Lad
ähä, ich versteh nur Bahnhof. Mal sehen, vielleicht kann ich das Problem irgendwie lösen...

Danke!
Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
15.01.2006  
 



Wenn es weniger auf die Performance angkommt - dann nutze einen neuen Prozess.

Damit die Prozesse kommunizieren können hatte ich die Pipe-Unit gepostet.

Salve.
 
15.01.2006  
 



Wenn Du eine Variable änderst, in Deinem Profan Code, so ändert sich evtl. auch die Speicheradresse dieser Variable. Sollte jetzt der Thread, der auch in Deinem Adressraum abläuft, auch wenn die Funktion in einer DLL steht, dieselbe Speicheradresse verwenden, weil er noch nicht weiß, das diese vom Hauptprogramm belegt worden ist, gibt es unschöne Effekte, bzw. Abstürze. Deshalb muß dafür gesorgt werden, das nur entweder der Thread oder die Profan-Runtime einen Speicherbereich benutzen. Dafür ist Profan aber nicht ausgelegt. Du kannst also nur die Speicherbereiche versuchen vor Überschreiben zu schützen, eben durch CriticalSection und Semaphoren.
Es wird also nicht Funktionieren. Es sind jederzeit Abstürze möglich. Das kann man schlecht austesten.
 
15.01.2006  
 



@Thomas: Natürlich hast Du grundsätzlich recht - bedenke aber das XProfanprogramme eher in einer VM ausgeführt werden - was die Sache entweder a) schwieriger oder b) einfacher macht.

Ich tendiere zu (a+b)/2 lol. Einige Dinge sind sicherlich Threadsicher - ander hingegen nichtmal mit criticalsections absicherbar da dies Roland tun müsste. Grundsätzlich glaube ich ist die PrfRun32.Exe garnicht so sehr Threadunsicher.

Die Frage ist hier also wie Threadsicher ist das Delphikompilat PrfRun32.Exe.
 
15.01.2006  
 



[quote:6f14876c3d=iF]
Die Frage ist hier also wie Threadsicher ist das Delphikompilat PrfRun32.Exe.[/quote:6f14876c3d]
Naja, wahrscheinlich überhaupt nicht. Die Runtime wäre ja als Threadsicheres Kompilat noch um einiges grösser, sieht man ja an Threadsicheren Sprachen, wo man dies Optional hat, z.B. FreeBASIC

Aber mit einem weiteren Process, der sogar dieselbe Runtime verwenden kann, und Deiner Pipe-PCU, sollte er sein Ziel doch erreichen
 
15.01.2006  
 




Frank
Abbing
Hi,

das ist einfach zu lösen. Du musst nur den neuen Tread innerhalb der Dll aufrufen!
So öffnet z.B. die ProSpeed Sprite-Funktion einen neuen Thread und kehrt dann sofort zum Hauptprogramm zurück. Derweil arbeitet der Thread weiter, bis ein Impuls vom Hauptprogramm ihn irgendwann wieder stoppt/beendet.
Voraussetzung ist hier aber das Laden der Dll via UseDll. External kann nicht verwendet werden, weil die Dll danach sofort wieder aus dem Speicher entfernt wird.
 
15.01.2006  
 



@Frank: Ich glaub er schreibt nicht an der DLL - er kann da nix drin aufrufen.
 
15.01.2006  
 




Frank
Abbing
Dann gibt es noch die Möglichkeit, selber eine Dll zu schreiben, welche die fremden Dll-Funktionen aufruft. Also mit zwei Dlls zu arbeiten.
 
16.01.2006  
 



Sobald der Thread und das Hauptprogramm dieselben Variaben verwenden, gibts Probleme. Als Ersatz für Timerfunktionen, zur Sprite-Bewegung mag es ja funzen, aber wenn Daten manipuliert werden, ist es aus, da der Zugriff (locking) nicht gesteuert wird, was im Falle von Processen von Windows erledigt wird.
Da ein Thread nur einen Parameter entgegen nehmen kann, ist eine Bearbeitung nur mit lokalen Variablen kaum möglich.
In manchen Anwendungsfällen gibts wohl keine Probleme, aber wenn ein Thread dazu verwendet wird, wofür er da ist, das Hauptprogramm von längeren Berechnungen entlasten, dann geht das nicht, ohne eine Locking Funktion.
 
16.01.2006  
 




Jac
de
Lad
@iF + Frank: Doch, die DLL schreibe ich selbst, ich weiß nur noch nicht, wie ich das Thread kreiere...

@all: Mir ist heute eine simple wie wirkungsvolle Lösung eingefallen, die mein Problem behebt, aber danke der Hilfe.

@Frank: Hülfe, was ist mit dir denn passiert???

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
16.01.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.216 Betrachtungen

Unbenanntvor 0 min.
Stephan Lührsen04.05.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie