Thead Vertändnisprobleme

Status
Nicht offen für weitere Antworten.
A

Anfänger

Gast
hallo,

ich rätsle seit einiger zeit was der Code Thread .sleep usw. für einen Einfluß in den nachff. Code haben soll.
Ich kann zwar merken , dass der Thead nach 20s endet , aber sehe keinen Sinn für die Schnittstelle.
Die Schnittstelle empfängt auch während und nach dem Thread. Welcher Teil ganz genau schläft, und welcher Teil läuft weiter ??
was passiert mit Events ?
In meiner appl. ist alles möglich, d.h. das Programm reagiert auchauf Buttons oder MenüEinträge.


der Code ist von Sun als Beispiel für Comm API gedacht.

Code:
import java.io.*;
import java.util.*;
import javax.comm.*;

public class SimpleRead implements Runnable, SerialPortEventListener {
    static CommPortIdentifier portId;
    static Enumeration portList;

    InputStream inputStream;
    SerialPort serialPort;
    Thread readThread;

    public static void main(String[] args) {
        portList = CommPortIdentifier.getPortIdentifiers();

        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                 if (portId.getName().equals("COM1")) {
               // if (portId.getName().equals("/dev/term/a")) {
                    SimpleRead reader = new SimpleRead();
                }
            }
        }
    }

    public SimpleRead() {
        try {
            serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
        } catch (PortInUseException e) {}
        try {
            inputStream = serialPort.getInputStream();
        } catch (IOException e) {}
	try {
            serialPort.addEventListener(this);
	} catch (TooManyListenersException e) {}
        serialPort.notifyOnDataAvailable(true);
        try {
            serialPort.setSerialPortParams(9600,
                SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {}
        readThread = new Thread(this);
        readThread.start();
    }

    public void run() {
        try {
             System.out.println("Start der Schlafzeit");
            Thread.sleep(20000);
        } catch (InterruptedException e) {}
          System.out.println("20 sek vorbeit");
    }

    public void serialEvent(SerialPortEvent event) {
        switch(event.getEventType()) {
        case SerialPortEvent.BI:
        case SerialPortEvent.OE:
        case SerialPortEvent.FE:
        case SerialPortEvent.PE:
        case SerialPortEvent.CD:
        case SerialPortEvent.CTS:
        case SerialPortEvent.DSR:
        case SerialPortEvent.RI:
        case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
            break;
        case SerialPortEvent.DATA_AVAILABLE:
            byte[] readBuffer = new byte[20];

            try {
                while (inputStream.available() > 0) {
                    int numBytes = inputStream.read(readBuffer);
                }
                System.out.print(new String(readBuffer));
            } catch (IOException e) {}
            break;
        }
    }
}
 

Illuvatar

Top Contributor
Kenn Comm-API net, aber is das vielleicht einfach da, damit sich das Programm net sofort beendet und die Events registriert werden können?
 
J

Java Lover

Gast
im enddefekt sorgt der thread für gar nichts jedenfalls nicht in dieser form wie er dort steht. weil der thread an sich ja dazu da ist multitasking zu ermöglichen. der multitask in diesem beispiel ist 20 sekunden zu warten, also nichts. so ist es eigentlich total überflüssig.
das einzige was ich mir vorstellen könnte ist, das dieser teilthread bei der initialisierung 20 sekunden abwartet, ist aber eigentlich nicht möglich.
lösch es doch einfach mal raus vielleicht bemerkst du ja nen unterschied.

so denn viel spaß damit
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben