WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

DLL und pause()-Funktion: Was steckt dahinter?

 

Pit1231

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2013, 08:25     Titel: DLL und pause()-Funktion: Was steckt dahinter?
  Antworten mit Zitat      
Hallo,

ich habe hier eine DLL, die ich über mex-Files an Matlab anbinde.

Wenn ich nun die DLL-Funktionen der Reihe nach in Matlab eintippe, dann funktioniert alles wunderbar.
Sobald ich aber in einer Schleife mehrere Funktionsaufrufe schnell hintereinander ausführe, dann stürzt Matlab ab.
Wenn ich dann allerdings die Funktionsaufrufe (innerhalb der Schleife) mit einer pause(0.01)-Funktion ergänze, dann funktioniert wieder alles.

Ich habe jetzt bei verschiedenen Threads hier im Forum gesehen, das wohl des öfteren mit der pause()-Funktion im Zusammenhang mit DLL-Aufrufen gearbeitet wird. Und ich frage mich, was steckt dahinter?

Hat das etwas mit der Speicherverwaltung zu tun?
Die DLL ist multi-threaded, Matlab nicht. Liegt da das Problem?
Die DLL nutzt die CDECL Aufrufkonvention. Somit kümmert sich Matlab um den gemeinsamen Stack. Hängt es damit zusammen?
Warum funktioniert das Ganze mit einer Pause von wenigen Millisekunden?

Die DLL funktioniert im Übrigen fehlerfrei mit C++ und C#.

Gruß Pit


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.05.2013, 21:22     Titel: Re: DLL und pause()-Funktion: Was steckt dahinter?
  Antworten mit Zitat      
Hallo Pit1231,

Ohne den Inhalt des Matlab-Programms sowie des MEX-Files und der DLL zu kennen, kann man die Ursache der Probleme nicht erraten.
Was genau bedeutet "Matlab stürzt ab"? Gibt es eine Fehlermeldung?
Hast Du schon mit einem Debugger versucht herauszufinden, wo genau die Probleme auftreten?

Eine triviale Ursache der Abhilfe durch PAUSE(0.01) könnte sein, dass damit der Schleifendurchlauf mindestens 0.01 Sekunden benötigt. Vielleicht lässt Du die Schleife ja 10 Sekunden lang laufen, so dass ohne PAUSE deutlich mehr Iterationen abgearbeitet werden, so dass z.B. ein Memory-Leak einen Crash provoziert.

Auch wenn die DLL Multi-Threaded ist, sollten keinerlei Probleme auftreten, solange das Threadmanagement keine Bugs aufweist. Es ist dabei nur ein schwacher Hinweis, dass es mit C++ keine Probleme gibt: Vielleicht wird die DLL ja anders aufgerufen.

Ich empfehle also, irgendwelche Details zu posten. Ohne die ist eine Hilfe auf wildes Raten angewiesen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.