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

Codeausführung in falscher Reihenfolge?

 

sword_warrior
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 04.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 17:28     Titel: Codeausführung in falscher Reihenfolge?
  Antworten mit Zitat      
Hallo zusammen

ich habe bei meinen Matlab programmen seit einiger Zeit das Problem, dass Matlab den Code nicht Schritt für Schritt abarbeitet, sondern das Ausführen gewisser Zeilen verzögert bis ich das nächste mal pause(0.1) ausführe...

Hier ein einfaches Beispiel:
Code:

test1=rand(1,3);
test2=rand(1,3);
figure(1)
plot(test1)
figure(2)
plot(test2)
tic
while toc < 10
    1
end
 


Hier führt mir Matlab folgende Reihenfolge aus:
1. figure 1 plotten
2. im Hauptfenster 10 sekunden lang 1 anzeigen
3. figure 2 plotten

Sprich die Ausführung der figure 2 wird hinter die while-schleife gestellt...

Wenn ich jedoch die while-Schleife im obigen Beispiel ersetze durch
Code:

while toc < 10
    pause(0.1)
    1
end
 

erscheint die figure 2 direkt nach der figure 1 (wie es sein sollte).
Das Problem tritt bei mir nicht nur bei plot auf, in gewissen Scripten wird z.B. die Funktion einer ActiveX DLL erst bei der nächsten pause ausgeführt. Dies führt natürlich zu fatalen Logikfehler im Script.

Das Problem habe ich auf zwei Computern bei uns festgestellt. Beide Computer laufen auf Windows XP, einer ist mit Matlab R2010a und einer mit Matlab R2008a ausgestattet. Der PC mit der R2010a Version hat eine parallel Computing toolbox, und beide Computer haben eine Instrument Control toolbox installiert.

Ist dieses ein bekanntes Problem, resp. gibt es irgendwelche Lösungen dafür?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.01.2011, 17:32     Titel:
  Antworten mit Zitat      
Hallo,

wenn eine Figure zu einem bestimmten Zeitpunkt aktualisiert werden soll, hilft
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sword_warrior
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 04.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 17:41     Titel:
  Antworten mit Zitat      
Das mit dem Plot ist nur ein Beispiel. Wie gesagt, das gleiche Phänomen tritt auch bei anderen Szenarien auf (dass er eine activeX dll oder einen Funktionsaufruf erst bei der nächsten Pause ausführt). Deshalb hilft mir das drawnow nicht wirklich weiter.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.01.2011, 19:04     Titel:
  Antworten mit Zitat      
Hallo,

da weiß ich auch nicht weiter. Wenn sich niemand meldet, kannst du's mal beim Support von Mathworks versuchen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 04.01.2011, 21:53     Titel:
  Antworten mit Zitat      
Hallo

Die Code wird schon nacheinander abgearbeitet.
Bei Graphischen Objekten ist es so, dass sie extra Zeit benötigen, um gezeichnet zu werden. Da der Code sehr schnell abgearbeitet wird, werden Graphiken oft erst am Ende der Ausführung gezeichnet oder aktualisiert. PAUSE oder DRAWNOW halten die Ausführung der Code an und geben dann die nötige Zeit um Graphiken zu zeichnen oder zu aktualisieren.

Dass im ersten Fall, FIGURE 1 gezeichnet wird liegt einfach an FIGURE Befehl
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.01.2011, 01:02     Titel:
  Antworten mit Zitat      
Hallo sword_warrior,

DRAWNOW führt nicht nur dazu, dass alle Grafik-Ausgaben abgeschlossen werden. Die gesamte Event-Queue wird abgearbeitet. Dazu gehören auch Mouse, Windows und Keyboard Events, die warten müssen, solange Matlab sehr beschäftigt ist. Ctrl-C wird z.B. in einigen Programmen nur dann abgefragt, wenn ein DRAWNOW dazu Zeit läßt.

PAUSE macht übrigens das gleiche, nutzt die Zeit also sinnvoller aus, als der Name vermuten läßt.

Deshalb vermute auch ich, dass DRAWNOW Dir helfen könnte. Eine magische Umsortierung von Befehlen finden jedenfalls nicht statt, und wäre technisch auch gar nicht möglich.

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.