Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Lenovo ha lanciato il ThinkTab X11 rimettendo piede nel segmento dei tablet Android con il marchio Think dopo oltre un decennio di assenza. Il risultato è un dispositivo che prende una direzione precisa: massima dotazione funzionale, costruzione resistente, autonomia fuori dagli schemi
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-06-2010, 08:33   #1
filipss
Junior Member
 
Iscritto dal: Jun 2010
Messaggi: 10
[java] Thread

Ciao a tutti,
ho un bel problema....vorrei scrivere un metodo che una volta invocato restituisca il suo risultato dopo un certo tempo t senza però fermare l'esecuzione (del main) del programma per il tempo t.
Ho provato con sleep(t) ma il programma si ferma completamente e trascroso t riprende l'esecuzione...

Grazie
Ciao
filipss è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2010, 08:42   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ciao,
c'è anche un'interfaccia grafica, oppure il tuo programma non ne ha nessuna e gira sotto consolle?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2010, 08:58   #3
filipss
Junior Member
 
Iscritto dal: Jun 2010
Messaggi: 10
ciao, grazie per avermi risposto

il programma gira sotto console
filipss è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2010, 10:17   #4
pernacentus
Member
 
L'Avatar di pernacentus
 
Iscritto dal: Apr 2009
Messaggi: 218
Ciao, forse non ho capito bene il tuo problema. Per restituisca il risultato intendi che lo stampi a video o lo ritorni attraverso una return?
pernacentus è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2010, 11:13   #5
filipss
Junior Member
 
Iscritto dal: Jun 2010
Messaggi: 10
Ciao ,
il metodo fa delle operazioni e alla fine stampa.

Ciao
filipss è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2010, 11:17   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Arieccomi.

Ecco un esempio un po' farlocco (però con sintax highlighting ):
Codice:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class FutureExample
{
    public static void main(String... args) {
        FutureExample application = new FutureExample();
        application.start();
    }

    private void start() {
        System.out.println("MainThread> application started.");

        ExecutorService executor = Executors.newSingleThreadExecutor();
        MyProcess myProcess = new MyProcess();
        System.out.println("MainThread> myProcess created.");

        System.out.println("MainThread> launching myProcess.");
        FutureTask<String> future = new FutureTask<String>(myProcess);
        executor.execute(future);

        // MainThread attende il risultato e nel frattempo può fare altro...
        while (! future.isDone()) {
            System.out.println("MainThread> waiting for myProcess termination...");
            try {
                Thread.sleep(500);
            } catch (InterruptedException ignored) {}
        }
        executor.shutdown();

        try {
            System.out.println("MainThread> retrive myProcess result.");
            String result = future.get();
            System.out.println("MainThread> myProcess say: \"" + result + "\"");
        } catch (InterruptedException ex) {
            System.out.println("MainThread> Ops... we have got an InterruptedException.");
        } catch (ExecutionException ex) {
            System.out.println("MainThread> Ops... we have got an ExecutionException.");
        }

        System.out.println("MainThread> application terminated.");
    }

    // MyProcess dorme per 6 secondi e mezzo circa e poi si degna di fare qualcosa, restituendo un messaggio
    private class MyProcess implements Callable<String>
    {
        @Override
        public String call() throws Exception {
            System.out.println("MyProcess> TASK STARTED.");
            try {
                Thread.sleep(6500);
            } catch (InterruptedException ignored) {}
            String message = "GODDAMNIT, I AM LAZY!";

            System.out.println("MyProcess> TASK COMPLETED.");
            return message;
        }
    }

}
Se lo mandi in esecuzione dovrebbe produrre un output simile a questo:
Codice:
MainThread> application started.
MainThread> myProcess created.
MainThread> launching myProcess.
MainThread> waiting for myProcess termination...
MyProcess> TASK STARTED.
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MainThread> waiting for myProcess termination...
MyProcess> TASK COMPLETED.
MainThread> retrive myProcess result.
MainThread> myProcess say: "GODDAMNIT, I AM LAZY!"
MainThread> application terminated.
In pratica si tratta di usare il package java.util.concurrent per creare un Callable, impachettarlo dentro un Future e schedularlo per l'esecuzione passandolo ad un Executor.

Callable in pratica è un Runnable, che in più ha la capacità di restituire un valore(oggetto) al termine della computazione.
Astrae questa capacità nel metodo call. Callable è parametrico, e il tipo parametrizzato rappresenta il tipo del valore(oggetto) restituito.
Nel nostro caso Callable<String> perchè ho voluto rappresentare un task che alla fine restituisce appunto una String.

Future rappresenta il risultato e lo stato finali di una computazione (ma non la computazione stessa). Nel nostro caso rappresenta il risultato e lo stato finali dell'esecuzione di MyProcess, il nostro Callable. Future è un'interfaccia, e nel codice ho usato FutureTask, una implementazione già fornita da java.util.concurrent, che "unisce" i concetti di risultato finale di una computazione (Future) e la computazione stessa che produce un risutato, ancora da eseguirsi (Callable).

Il FutureTask viene mandato in esecuzione asincrona passandolo al metodo execute di un Executor:
Codice:
executor.execute(future);
Il thread principale resta così libero di fare altro, finchè l'esecuzione del task non è finita:
Codice:
while (! future.isDone()) {
    // fai altro
}
Se non si vuole fare niente finchè non si ha il risultato (perchè ad esempio si possono schedulare per l'esecuzione più task in contemporanea, e si vuole procede solo dopo aver ottenuto tutti i risultati dei task) si può chiamare direttamente il metodo get del Future, che è bloccante (blocca il thread chiamante finchè l'esecuzione del Future non è terminata):
Codice:
String result = future.get();
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 08-06-2010 alle 11:56.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2010, 11:20   #7
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Ti serve un Thread indipendente dal main. Eventualmente, dovrai badare a sincronizzarli.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2010, 12:19   #8
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Vedi se questo esempio fa per te:

http://sites.google.com/site/luomora...javabase#timer

solo che devi usare il metodo schedule con parametri
( this, millisecondi )
in cui chiaramente sostituisci "millisecondi" con il tempo che devi attendere
lovaz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
SpaceX Starship: dopo il successo di Fli...
Gli incendi in Spagna minacciano la staz...
Intel punta sul vetro: partnership con L...
L'acquisizione di ATI compie 20 anni: AM...
iPhone 18 Pro, Apple le prova tutte per ...
NVIDIA, Samsung, SK hynix e Broadcom: a ...
Sony rompe il silenzio: God of War Laufe...
iPhone Ultra, lancio ritardato per il pi...
Microsoft rafforza l'attivazione di Wind...
Galaxy S27 e S27+: Samsung starebbe test...
macOS più sicuro di Windows? Il n...
L'UE punta il dito contro TikTok: ecco c...
Qualcomm aumenterà i prezzi dei c...
TOP 12 Amazon weekend: al top una stampa...
Come sfruttare le offerte di Amazon per ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v