IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vlákna

Aktivity
Avatar
Karel
Neregistrovaný
Avatar
Karel:24.9.2013 22:00

Prosím Vás jak udělat moderně příkazy:
Thread.Resume();
Thread.Suspend();

//beru jakoukoli alternativu díky.

 
Odpovědět
24.9.2013 22:00
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:25.9.2013 8:41

Na práci s vlákny přeci není nic zastaralého.

Nahoru Odpovědět
25.9.2013 8:41
New kid back on the block with a R.I.P
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na David Hartinger
Milan Gallas:25.9.2013 12:37

metody Resume() a Suspend() jsou zastaralé a mám ten dojem že byly i odebrány.

 
Nahoru Odpovědět
25.9.2013 12:37
Avatar
Milan Gallas
Tvůrce
Avatar
Odpovídá na
Milan Gallas:25.9.2013 12:40

Možná použít tohle:

while(pozasteveno){
vlakno.wait();
}

pozastaveno je proměnná typu boolean, kterou nastavuješ dle potřeby. Nejsem doma u pc, ale mám dojem že by to mělo normálně fungovat.

Editováno 25.9.2013 12:40
 
Nahoru Odpovědět
25.9.2013 12:40
Avatar
Odpovídá na
Luboš Běhounek Satik:25.9.2013 13:04

Thread.Suspend() mohlo vlákno uspat na libovolném místě, což nemusí být úplně optimalni a threadsafe.

Muzes si treba vytvorit objekt typu ManualResetEvent, na ktery uvidej obe vlakna

a pak v hlavnim vlakne ho uspis pres jeho funkci .Reset() a spustit pres .Set()

a ve vedlejsim vlakne na uspavanem miste zavolas jeho .Wait()

mas pak jistotu, ze ti to vlakno vzdy usne az po dokonceni veskere prace, ktera se v tom miste provadela, presne v miste toho .Wait()

Editováno 25.9.2013 13:05
Nahoru Odpovědět
25.9.2013 13:04
https://www.facebook.com/peasantsandcastles/
Avatar
Karel
Neregistrovaný
Avatar
Karel:25.9.2013 19:23

Už mi to jde uspat ale pořád ne probudit.
přidám pouze úryvek z mého kódu:

synchronized void pozastav() {
   pozastavene = true;
 }

 // obnovení vlákna.
 synchronized void obnov() {
   pozastavene = false;
   notify();
 }

@Override
  public void run(){
      cycleTime = System.currentTimeMillis();
      while(inGame){
          atack();
          sendMessage();
          move();
          synchronis();
          repaint();


     try {
       synchronized (this) {
         while (pozastavene) {
           wait();
         }
       }
         } catch (InterruptedException ex) {
                  Logger.getLogger(Board.class.getName()).log(Level.SEVERE, null, ex);
          }
       }
   }

   public void synchronis(){
       cycleTime += DELAY;
          long difference = cycleTime - System.currentTimeMillis();
          try{
              Thread.sleep(difference);
           }
           catch(InterruptedException e){
               System.out.println(e.getMessage());
           }
           cycleTime = System.currentTimeMillis();
   }

nevíte kde by mohla být chaba

 
Nahoru Odpovědět
25.9.2013 19:23
Avatar
Karel
Neregistrovaný
Avatar
Karel:25.9.2013 19:27

a chyba hlášky:
Exception in thread "Thread-1" java.lang.Ille­galArgumentEx­ception: timeout value is negative.

 
Nahoru Odpovědět
25.9.2013 19:27
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:25.9.2013 19:37

Ty snad umíš spát zápornou dobu?

Nahoru Odpovědět
25.9.2013 19:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Karel
Neregistrovaný
Avatar
Odpovídá na Kit
Karel:25.9.2013 23:17

Proč zápornou dobu?

 
Nahoru Odpovědět
25.9.2013 23:17
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:25.9.2013 23:20

Však to píše: "timeout value is negative".

Nahoru Odpovědět
25.9.2013 23:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.