Avatar billede mickni33 Nybegynder
15. maj 2006 - 18:35 Der er 13 kommentarer og
1 løsning

timer thread

hvordan laver man en Timer i en tråd som stopper en while løkke efter 5 sekunder
Avatar billede mikkelbm Nybegynder
15. maj 2006 - 18:42 #1
Måske noget a la:

Timer timer = new Timer(5000, new ActionListener()
{
    public void actionPerformed(ActionEvent evt)
    {
        running = false;
    }   
});
timer.start();


....

Din tråd:

while (running)
{
  // ...
}


Hvis jeg har forstået spørgsmålet ret?
Avatar billede mickni33 Nybegynder
15. maj 2006 - 19:03 #2
Hmmmmmmm forstår den ikke rigtig...Havde tænkt mig noget ligende sådan her
I pseudo kode....

public static void main(){
Thread minThread=new Thread();
    while(sekunder <10){
      bool status= socket.ReiceveDataFromPort();
      System.out.println("Data ankom inden de 10 sekunder")
    }
   
  System.out.println("Der er desværre gået 10 sekunder og data ankom ikke")
Avatar billede mikkelbm Nybegynder
15. maj 2006 - 19:07 #3
Hvad er 'socket' for et objekt?

Og er det et låsende kald du foretager til: ReiceveDataFromPort ?
Avatar billede mickni33 Nybegynder
15. maj 2006 - 20:53 #4
ja metoden låser og venter på data, og så vile jeg gerne have den skulle stoppe med at vente på data efter de 10 sekunder
Avatar billede mikkelbm Nybegynder
15. maj 2006 - 20:56 #5
Men hvad er 'socket' ?

For du skal jo så have afbrudt kaldet til den metode. Og det kan du nok ikke, uden at få den til at smide en exception af en art.
Avatar billede mickni33 Nybegynder
15. maj 2006 - 20:56 #6
hmmmmm du har ret..... tænker lige
Avatar billede mickni33 Nybegynder
15. maj 2006 - 20:58 #7
kan man ikke lave en socket.close efter de 10 sekunde
Avatar billede mickni33 Nybegynder
15. maj 2006 - 21:01 #8
husk lig at lave et svar
Avatar billede mikkelbm Nybegynder
15. maj 2006 - 21:33 #9
Prøv at poste koden til din ReiceveDataFromPort...
Avatar billede mickni33 Nybegynder
15. maj 2006 - 21:39 #10
public boolean modtagDataFraRCX(){
    boolean status=false;
    try{
      String datastr="";
      byte[] bytedata = new byte[10];
/***** Her ventes der på at der skal ankomme en pakke fra serielporten****/
        dis.read(bytedata);
/*********************************************************************/
        String str = new String(bytedata, (int) 0);
        datastr = str.substring(0, 7);
      // System.out.println(datastr);
      totalPakke=datastr;
      //sender pakken til datalinklaget//
      status=datalinklaget(datastr.toCharArray(),1);
      if(status== true){
        return true;
      }
      else{
        return false;
      }

    }
Avatar billede mickni33 Nybegynder
15. maj 2006 - 21:40 #11
Hvis der så går mere end 10 sekunder betyder det at der ikke er kommet en acknowledge og derfor vil jeg sende pakken igen
Avatar billede mikkelbm Nybegynder
15. maj 2006 - 21:53 #12
På din Socket kan du sætte: setSoTimeout (int timeout) // i millisekunder

Hvis tiden overskrides i din read-metode på InputStream vil der blive smidt en java.net.SocketTimeoutException. Som du så kan fange og returnere en værdi der indikerer at der er opstået en timeout.
Avatar billede mickni33 Nybegynder
15. maj 2006 - 21:54 #13
smaaaart kigger lige på documentationen
Avatar billede mickni33 Nybegynder
15. maj 2006 - 21:57 #14
Hehehe jeg er da et fjols :-) det bruger jeg da bare
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