Design pattern per l'annullamento di un'attività lunga in una sottotrama

0

Supponiamo di avere un programma di copia dei file. Ha due thread, un thread UI che mostra l'avanzamento dell'operazione di copia e un thread di lavoro che copia il file. L'interfaccia utente ha un pulsante per annullare il processo. Quale modello suggerisci qui per il trasferimento dell'evento di annullamento per copiare il thread? Voglio una soluzione orientata agli oggetti.

    
posta E. Vakili 20.01.2015 - 09:09
fonte

2 risposte

1

Se stai usando Java, usa Thread.interrupt - questo è esattamente lo scenario per il quale è stato progettato il sistema.

Altrimenti, dovrai vedere quali sono le primitive di sincronizzazione fornite dalla tua lingua. Se ha una classe di sincronizzazione degli eventi, usala (effettua periodicamente il polling dell'evento nel thread di lavoro e termina se viene attivata, segnala l'evento se l'utente fa clic sul pulsante). Gli eventi a volte vengono chiamati Condizione, quindi controlla anche il nome.

In caso contrario, dovrai implementarne uno tu stesso, usando qualunque barriera primitiva della tua barriera di memoria. Tutto ciò che serve è una classe con una variabile booleana inizializzata su false e due metodi: set, che imposta la variabile su true ed esegue una barriera di scrittura, e get, che esegue una barriera di lettura e restituisce la variabile. Nella maggior parte delle lingue, se non si dispone di esplicite operazioni di barriera della memoria, è possibile utilizzare qualsiasi operazione di esclusione reciproca.

    
risposta data 20.01.2015 - 09:28
fonte
-1

Mi viene in mente il modello Command . Hai una classe Command interface / trait / abstract e crea ad esempio un StopCopyingCommand e invialo al thread di copia.

Il thread di copia btw. potrebbe essere implementato utilizzando il modello State in modo che accetti diversi tipi di comandi per stati diversi.

    
risposta data 20.01.2015 - 09:25
fonte

Leggi altre domande sui tag