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

Matlab Java Threads

 

LargeBearCat
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2012, 15:38     Titel: Matlab Java Threads
  Antworten mit Zitat      
Hallo ihr Profis,
ich benutze eine Matlab Routine (Matlab 2007b 32bit), die ein Java-Objekt von einer Klasse ThreadTest aufruft.

M-File:
Code:

threadTestObject=ThreadTest;
threadTestObject.runTest();
 


threadTestObject erzeugt in einer for-Schleife die Zahlen 0 bis 10. Diese Zahlen werden nach und nach (pro Sekunde aufgrund von sleep Befehl) an ein Thread der Klasse ExampleThread weitergegeben.

ThreadTest.java:
Code:

public class ThreadTest
{    
   private int[] measurementInput;
   private ExampleThread thread1;
   
   public ThreadTest()
   {
      measurementInput=new int[1];
   }
   
   public void runTest()
   {
        for (int i=0;i<10;++i)
        {
           synchronized(measurementInput)
           {
              measurementInput[0]=i;
              System.out.print("ThreadTest: ");System.out.println(measurementInput[0]);
           }
            if (thread1==null)
            {
               thread1=new ExampleThread(measurementInput);
               thread1.start();
            }
          try
          {Thread.sleep(1000);}
          catch(InterruptedException e)
          {} // do nothing
               
        }
        thread1.interrupt();
   }
     
}
 


Im Thread "ExampleThread.java" wird geschaut, ob es ein neues Update gibt, erst dann wird das Update ausgegeben.

ExampleThread.java:
Code:

public class ExampleThread
extends Thread
{
   private int[] measurementInput;
   private int counter;
   private boolean inputOK;
   
   public ExampleThread(int[] measurementInput)
   {
      this.counter=-1;
      this.measurementInput=measurementInput;
      this.inputOK=false;
   }
   
   public void run()
   {
      while (!isInterrupted())
       {
         synchronized(measurementInput)
         {
            if (measurementInput[0]>counter)
            {
               counter=measurementInput[0];
               System.out.print("Thread: ");
System.out.println(measurementInput[0]);
               inputOK=true;
            }
         }
         if (inputOK)
         {System.out.println("Hallo unten!");}
         inputOK=false;
       }
   }
}
 


Während in einer reinen Java-Umgebung, die Ausgabe von "ThreadTest.java" und "ExampleThread.java" sich wie erwartet sich gegenseitig abwechseln, gibt Matlab zuerst nur 10x die Anzeige von "ThreadTest.java" aus und dann erst 10x die Anzeige von "ExampleThread.java". -----------> Erklärung??

Danke für die Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 19.03.2012, 19:27     Titel:
  Antworten mit Zitat      
Hey,

ich könnte mir vorstellen das es daran liegt, dass Matlab nur einen Thread hat und nichts ohne weiteres parallel ausführen kann. Nicht umsonst gibt es javaObjectEDT. Dieses sorgt unter anderem dafür, dass Java GUI Objekte im Matlab Thread ausgeführt wird.

Greetings
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 - 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.