Création d'un indicateur d'attente/occupé pour les processus exécutés
Lors de l'exécution de processus enfants, comme dans l'exemple fourni, il peut être avantageux de fournir retour visuel à l'utilisateur indiquant que le processus est en cours d'exécution, en particulier lorsque le temps d'exécution peut être long. Cela peut aider à empêcher l'utilisateur de penser que le programme est gelé.
Pour créer un indicateur d'attente/occupé, une approche consiste à utiliser une goroutine pour imprimer périodiquement quelque chose pendant l'exécution du processus. Une fois le processus terminé, un signal peut être envoyé à la goroutine pour y mettre fin.
Voici un exemple de code qui illustre cette approche :
<code class="go">package main import ( "fmt" "log" "os/exec" "time" ) func indicator(shutdownCh <-chan struct{}) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for { select { case <-ticker.C: fmt.Print(".") case <-shutdownCh: return } } } func main() { cmd := exec.Command("npm", "install") log.Printf("Running command and waiting for it to finish...") // Start indicator: shutdownCh := make(chan struct{}) go indicator(shutdownCh) err := cmd.Run() close(shutdownCh) // Signal indicator() to terminate fmt.Println() log.Printf("Command finished with error: %v", err) }</code>
Ce code utilise un ticker pour imprimer un point toutes les secondes et un canal d'arrêt pour signaler à la goroutine de l'indicateur de se terminer lorsque le processus est terminé.
Pour démarrer une nouvelle ligne tous les cinq points, modifiez la fonction de l'indicateur comme suit :
<code class="go">func indicator(shutdownCh <-chan struct{}) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for i := 0; ; { select { case <-ticker.C: fmt.Print(".") if i++; i%5 == 0 { fmt.Println() } case <-shutdownCh: return } } }</code>
En mettant en œuvre ce type d'indicateur, vous pouvez fournir un retour visuel clair aux utilisateurs, indiquant que le processus est en cours et n'est pas gelé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!