thread

Mattepuffo's logo
Eseguire richieste asincrone in Android e Kotlin con Anko

Eseguire richieste asincrone in Android e Kotlin con Anko

Per eseguire richieste asincrone in Android, siamo abituati ad usare AsyncTask, sia in Java che in Kotlin.

Per quest'ultimo, però, ho scoperto una libreria che ci permette di avere sintassi molto più Kotlin style: Anko!

E' una libreria scritta direttamente da Jetbrain, e quindi direi che è più che valida.

Mattepuffo's logo
Programmazione multi-threading in Python

Programmazione multi-threading in Python

La programmazione multi-threading in Python è abbastanza semplice usando il modulo threading!

Oggi vediamo qualche esempio in Python 3; ma dovrebbe essere abbastanza simile anche per la versione 2.

Nel primo esempio, i threads non sono sincronizzati, ed infatti l'output sarà una cosa del genere:

Inizio Thread 1
Inizio Thread 2
Thread 1: Mon Apr 24 14:04:58 2017
Thread 2: Mon Apr 24 14:04:59 2017
Thread 1: Mon Apr 24 14:04:59 2017
Thread 1: Mon Apr 24 14:05:00 2017
Thread 2: Mon Apr 24 14:05:01 2017
Thread 1: Mon Apr 24 14:05:01 2017
Thread 1: Mon Apr 24 14:05:02 2017
Fine Thread 1
Thread 2: Mon Apr 24 14:05:03 2017
Thread 2: Mon Apr 24 14:05:05 2017
Thread 2: Mon Apr 24 14:05:07 2017
Fine Thread 2
Fine del main thread

Mattepuffo's logo
Usare i thread in Java con Executor Framework

Usare i thread in Java con Executor Framework

In Java, per creare un task, generalmente implementiamo l'interfacca Runnable o estendiamo la classe Thread.

Con le ultime versioni (non so precisamente da quale) è possibile agire anche in altra maniera, ovvero usando l'Executor Framework.

La classe Executors (da non confondere con l'interfaccia Executor) ci mette a disposizione tre metodi:

  • newCachedThreadPool(): crea un nuovo thread quando serve, ed usa la cache per velocizzarne l'eventuale riuso
  • newFixedThreadPool(int nThreads): il numero massimo di thread viene impostato come parametro
  • newSingleThreadExecutor(): un unico thread che esegue tutti i task; se "muore" viene ricreato

Andiamo a vedere semplice esempio.

Mattepuffo's logo
Catturare l'output di un comando in Java

Catturare l'output di un comando in Java

Quando lanciamo un comando da un nostro programma in Java (Swing), di default non ne vediamo l'output.

E il motivo è che, generalmente, viene mandato sullo standard output, che non è la interfaccia scritta in Java.

In molti casi, però, potrebbe essere importante catturare l'output, soprattutto per vedere a che punto siamo con la sua esecuzione.

Oggi vediamo proprio questo: come visualizzare l'output di un comando su una JTextArea.

Il programma che lanceremo sarà youtube-dl, programma da riga di comando per scaricare la musica in formato MP3 da Youtube.

Mattepuffo's logo
Aggiornare la gui in Qt da un altro thread

Aggiornare la gui in Qt da un altro thread

Supponiamo di voler eseguire un operazione in un thread secondario, e di voler aggiornare la nostra gui man mano che l'operazione va avanti: come possiamo fare questa cosa in Qt?

Molto semplicemente usando il metodo connect, i SIGNAL e gli SLOT.

Direi di cominciare dal nostro lavoro in background:

// workerthread.h
#ifndef WORKTHREAD_H
#define WORKTHREAD_H

#include <QMutex>
#include <QThread>

class WorkerThread : public QThread
{
    Q_OBJECT
public:
    explicit WorkerThread(QObject *parent = 0, bool b = false);
    void run();
    bool stop;

signals:
    void valueChanged(QString text);
    void finished();
};

#endif // WORKTHREAD_H