Création d'un indicateur d'attente/occupé pour les processus en cours d'exécution
Lors de l'exécution d'un processus enfant tel que « npm install », cela peut prendre beaucoup de temps pour le processus pour compléter et télécharger les packages. Pendant ce temps, il est essentiel de fournir un feedback à l'utilisateur pour lui indiquer que le processus est en cours.
Mise en place d'un indicateur d'occupation
Pour créer un indicateur d'occupation, nous pouvons exploitez une autre goroutine qui s’exécute en même temps que le processus enfant. Cette goroutine imprime périodiquement un caractère (par exemple, un point) sur la console pour montrer l'activité. Lorsque le processus enfant est terminé, nous signalons à la goroutine de se terminer.
<code class="go">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...") shutdownCh := make(chan struct{}) // Channel to signal goroutine termination go indicator(shutdownCh) err := cmd.Run() close(shutdownCh) // Signal indicator goroutine to terminate fmt.Println() log.Printf("Command finished with error: %v", err) }</code>
Personnalisation de l'indicateur
Vous pouvez modifier l'indicateur pour imprimer une nouvelle ligne après un délai spécifique nombre de points en utilisant une version modifiée de la fonction d'indicateur :
<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 fournissant ce retour visuel, vous pouvez tenir les utilisateurs informés que le processus est toujours en cours et éviter toute confusion ou délai d'attente causé par la perception d'inactivité.
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!