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

Thread

 

gimme_matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2008, 09:57     Titel: Thread
  Antworten mit Zitat      
Hallo alle zusammen,

ich hab da mal ein Problem,die mir durch googeln,die Hilfe von Matlab durchforsten und Foren durchsuchen noch nicht gelöst ist.

kurze Fassung:Wie programmier ich einen Thread in Matlab,sodass zBsp. 2 Funktionen parallel ablaufen ohne das parallel toolkit,da dieses nur für Multicore oder Mehrrechnerbenutzung ist?

lange Fassung:
Ich habe eine Programm (GUI) geschrieben welches bei dem Aufruf der Hauptfunktion eine recht lange Liste an Anweisungen etc. ausführen soll.Das ganze ist auch noch in recht vielen Schleifen gekapselt.
Nun möchte ich,das,wenn der Benutzer Escape drückt das Programm beendet wird.
Die Funktion für Tastenabfragen hab ich schon realisiert mit der KeyPressFcn und es klappt auch alles soweit.ABER:in der Mainfunktion sind einige Befehle von Matlab,die einige Zeit in Anspruch nehmen (mehrere Sekunden).Zum Beispiel imcomplement().Wenn ich jetzt Escape drücke führt Matlab natürlich erst die Funktionen aus und reagiert nicht auf meinen Tastendruck.Entweder reagiert Matlab erst wenn es die Funktionen in der Schleife alle beendet hat oder wenn ich mit pause(0.01) 1 Milisekunde Pause verschaffe damit die Nachrichten beendet werden.
Nun ist es natürlich sehr unfein bei einer Schleife die ~1000 Zeilen Quelltext hat und Funktionen immer wieder diese Pause zu setzen,da sich alles summiert.
Desweiteren aktuallisiert sich die JavaOberfläche des Gui's nicht mehr schnell genug,da er wirklich in der Schleife feststeckt bis er das aktuelle Bild bearbeitet hat bzw. Pause hat auf das Keyevent zu reagieren.
Also sehe ich die einzige Möglichkeit die Funktion als Thread auszuführen.Wichtig dabei ist,dass ich nicht von Matlab das Parallel Toolbox Dingens besitze und die Anwendung unter der Vorraussetzung eines Single Cores gestartet wird.
Hier nun die Frage: wie programmier ich unter Matlab einen Thread?Leider scheint es nicht so einfach zu sein wie in C++ Wink

Vielen Dank
Mfg


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 09.10.2008, 12:54     Titel:
  Antworten mit Zitat      
Hallo,

ein paar Kommentare (leider ohne wirklich die Frage zu beantworten):
- die Parallel Computing Toolbox ist in der Tat sinnvoll bei Multicore/Cluster-Umgebungen, funktioniert aber auch brav auf einem Singlecore (ohne natürlich einen Geschwindigkeitsvorteil zu bringen). Allerdings so oder so: helfen bei Deinem Problem würde sie nicht, dazu ist sie nicht gedacht
- drawnow statt pause(0.01) tut im Prinzip das gleiche, allerdings ohne tatsächlich die 10ms zu warten
- ich fürchte, Du musst abwägen zwischen der Zeit, die Du für das updaten des Bilds brauchst (drawnow) und der reaktionszeit auf "escape"
- was ich häufig mache ist am Ende der Schleife
Code:

was in diesem Fall jeden 10. Schleifendurchlauf drawnow aufruft. Die 10 ist natürlich willkürlich und kann auf einen "passenden" Wert gesetzt werden.

Ciao,
Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
gimme_matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2008, 13:46     Titel:
  Antworten mit Zitat      
Hiho,

danke für deine fixe Antwort.Es ist wirklich schade,dass Matlab (so wie ich jetzt rausgefunden habe) selber nur single-thread unterstützt (erst ab 2007b multi und dann auch nur einige Funktionen) und der einzige Weg einen Thread zu implementieren darin besteht dies über eine andere Programmiersprache zu machen.
Ich werde die Technik von dir gleich mal mit einbauen.Momentan versuch ich das Problem so zu lösen,das ich meine Funktion aufrufe,diese dann Zeilenweise bzw. Blockweise (if,else,for,while...end) den Quelltext liest und mit eval die gewünschte Funktion durchführt.Mit dem von dir gegeben code-snippet werde ich dann aller 10 Zeilen das drawnow ausführen.Ich muss nur noch überlegen nach wievielen Zeilen ich immer auf Tastendruck prüfe.
Eventuell schau ích mir mal mit tic toc die Zeiten an,damit ich weiß,wie hoch der "Zeitverlust" ist.

Mfg
 
gimme_matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2008, 10:18     Titel:
  Antworten mit Zitat      
Ich bins nochmal.
Hat leider nicht funktioniert.Habe aber herausgefunden,dass die Wurzel des Bösen liegt in der Funktion imtophat() bzw. in einer der ihrer Unterfunktionen (B = morphmex(mex_method, B, double(getnhood(se(k))), getheight(se(k)), unpacked_M); ).Das Ausführen dieser Zeile kostet mich meist 2-3 sec. und das ganze dann noch mehrmals,weil eine schöne for Schleife davor ist.
Hab ich eine Möglichkeit diese Funktion von Matlab zu überarbeiten und einen Zusatzparameter einzuschleusen,der meine KeyPressFcn aufruft?

Hab mir das sogedacht:
xyz=imtophat(1para,2para,zusatzpara)
zusatzpara==null ...mache nix,führe die Funktion durch,wie von Matlab
%(wenn ich die Fkt mal in einem anderen Programm verwende)
zusatzpara~=null führe die Funktion aus,wie ich es will

Danke im Voraus
 
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 - 2024 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.