Avatar billede kube Nybegynder
21. april 2006 - 15:14 Der er 4 kommentarer og
1 løsning

Alternativ til Thread.sleep() ved læsning fra COM port

Hej Eksperter,
jeg har et lille program, der skriver til COM porten og der er så en enhed, der svarer tilbage med et resultat!

Men når jeg har skrevet til COM porten og vil til at læse resultatet, må jeg benytte Thread.sleep() for at være sikker på der er noget at læse.

Er der en smart måde, så programmet venter til, der er noget at læse?
Avatar billede arne_v Ekspert
21. april 2006 - 15:20 #1
Din read blocker vel indtil der er mindst en byte at laese.

Det er ret standard at laese i en loop indtil man har modtaget
en komplet maengde data (f.eks. en linie afsluttet med CR LF).
Avatar billede kube Nybegynder
21. april 2006 - 15:38 #2
mit problem ligger et andet sted. Tak for hjælpen.
Avatar billede snoop_one Nybegynder
21. april 2006 - 23:52 #3
Du benytter vel en inputstream fra din serial port? noget ala,

inputStream = serialPort.getInputStream();

på din input stream kan du kalde metoden available().

et lille eksempel,
     
      /**
    * Recieves a byte from the serial port in a bloking way.
    *
    * @return the recieved byte.
    * @throws IOException
    */
    public byte recieveByte() throws IOException {
        byte[] readBuffer = new byte[1];
        while (inputStream.available() == 0) {
        }
        inputStream.read(readBuffer);
        return readBuffer[0];
    }
Avatar billede snoop_one Nybegynder
19. maj 2006 - 09:44 #4
Er problemet blevet løst?
Avatar billede kube Nybegynder
19. maj 2006 - 15:18 #5
ja
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester