"Gastar" a CPU de tempos em tempos

8 respostas
M

Como posso fazer uma aplicacao que aumente o uso da CPU de tempos em tempos?
Como seria o metodo para “gastar” a CPU?

8 Respostas

Naruffy

Você podia lançar uma Thread com um loop infinito nela no intervalo que você quer.(Deve ter alguma outra maneira mas essa foi a única que pensei =P)

Agora eu fiquei curisoso pra saber o porque você quer isso xD

Marky.Vasconcelos

Voce pode ficar jogando arquivos de um lado pro outro… copiar milhares de arquivos pras pastas do sistema.

Um processo Swing bem pesado cria um JScrollPane e pinta um Graphics2D gigante nele.

Dai vai da sua imaginação.

Mas pra que voce quer isso?

MrDataFlex

acho que este tipo de duvida idiota, antes de ser respondida, deve ser justificada.

ateh

T

magaupe:
Como posso fazer uma aplicacao que aumente o uso da CPU de tempos em tempos?
Como seria o metodo para “gastar” a CPU?

Ligue seu antivírus preferido; ele vai gastar 100% da CPU do seu computador continuamente e você não poderá mais trabalhar.

Para que você quer gastar CPU? Para gastar mais energia elétrica e aumentar o efeito estufa, lançando mais gases na atmosfera?

M

thingol:
magaupe:
Como posso fazer uma aplicacao que aumente o uso da CPU de tempos em tempos?
Como seria o metodo para “gastar” a CPU?

Ligue seu antivírus preferido; ele vai gastar 100% da CPU do seu computador continuamente e você não poderá mais trabalhar.

Para que você quer gastar CPU? Para gastar mais energia elétrica e aumentar o efeito estufa, lançando mais gases na atmosfera?

É mais ou menos isso. Preciso testar quanto dura a bateria de um dispositivo movel e para isso pretendo consumir o maximo de processamento possível, já que isso gasta bastante energia. Tipo, ele tem que ficar 5 segundos no nivel maximo de processamento e depois 45s em idle. Alguem sabe como consigo isso?

T

Ah, entendi.

Você pode fazer algo como:

class BusyIdle implements Runnable {
    int nSecondsBusy, nSecondsIdle, totalSeconds;
    volatile boolean cancel = false;
    public BusyIdle (int nSecondsBusy, int nSecondsIdle, int totalSeconds) {
        this.nSecondsBusy = nSecondsBusy;
        this.nSecondsIdle = nSecondsIdle;
        this.totalSeconds = totalSeconds;
    }
    private void spinBusy(int nSeconds) {
        long start = System.currentTimeMillis();
        while (!cancel && (System.currentTimeMillis() - start) < (nSeconds * 1000L)) {
            ;
        }
    }
    private void spinIdle(int nSeconds) {
        long start = System.currentTimeMillis();
        while (!cancel && (System.currentTimeMillis() - start) < (nSeconds * 1000L)) {
            try { Thread.sleep (100); } catch (InterruptedException ex) { }
        }
    }
    public void run () {
        long start = System.currentTimeMillis();
        while (!cancel && (System.currentTimeMillis() - start) < (totalSeconds * 

1000L)) {
            spinBusy (nSecondsBusy);
            spinIdle (nSecondsIdle);
        }
    }
    public static void main(String[] args) {
        new Thread(new BusyIdle (5, 45, 1000)).start();
    }
}
T

Eu pus um flag “cancel” para você setar (por um botão, por exemplo) se quiser interromper o teste.

M
thingol:
Ah, entendi. Você pode fazer algo como:
class BusyIdle implements Runnable {
    int nSecondsBusy, nSecondsIdle, totalSeconds;
    volatile boolean cancel = false;
    public BusyIdle (int nSecondsBusy, int nSecondsIdle, int totalSeconds) {
        this.nSecondsBusy = nSecondsBusy;
        this.nSecondsIdle = nSecondsIdle;
        this.totalSeconds = totalSeconds;
    }
    private void spinBusy(int nSeconds) {
        long start = System.currentTimeMillis();
        while (!cancel && (System.currentTimeMillis() - start) < (nSeconds * 1000L)) {
            ;
        }
    }
    private void spinIdle(int nSeconds) {
        long start = System.currentTimeMillis();
        while (!cancel && (System.currentTimeMillis() - start) < (nSeconds * 1000L)) {
            try { Thread.sleep (100); } catch (InterruptedException ex) { }
        }
    }
    public void run () {
        long start = System.currentTimeMillis();
        while (!cancel && (System.currentTimeMillis() - start) < (totalSeconds * 

1000L)) {
            spinBusy (nSecondsBusy);
            spinIdle (nSecondsIdle);
        }
    }
    public static void main(String[] args) {
        new Thread(new BusyIdle (5, 45, 1000)).start();
    }
}

Show de bola. E como seria caso eu queira que ele rode infinitamente sem essa variavel totalSeconds?

Criado 6 de abril de 2009
Ultima resposta 8 de abr. de 2009
Respostas 8
Participantes 5