golang で GUI アプリケーションを作成する場合、次のステップに進むためにユーザーがウィンドウを閉じるまで待つ必要があることがよくあります。この記事では、golangでウィンドウが閉じるのを待つ方法を紹介します。
golang では、チャネルはゴルーチン間の通信に使用されるデータ構造です。チャネルを使用してウィンドウが閉じるのを待つことができます。
まず、終了イベントを受信するチャネルを作成する必要があります。次に、ウィンドウを閉じるイベントが発生すると、そのイベントをチャネルに送信し、メインの goroutine でチャネルがイベントを受信するのを待ちます。
以下はサンプル コードです:
package main import ( "fmt" "github.com/andlabs/ui" ) func main() { // 创建一个channel,用于接收关闭事件 done := make(chan struct{}) // 创建窗口 window := ui.NewWindow("Golang窗口等待关闭示例", 200, 100, false) // 处理窗口关闭事件 window.OnClosing(func(*ui.Window) bool { close(done) // 发送关闭事件到通道 return true // 关闭窗口 }) // 显示窗口 window.Show() // 等待关闭事件 <-done fmt.Println("窗口已关闭") }
上記のコードでは、andlabs/ui パッケージを使用してウィンドウを作成しました。ウィンドウが閉じられると、close イベントをチャネルに送信し、チャネルがイベントを受信するまでメイン goroutine で待機します。
チャネルを使用して待機することに加えて、同期パッケージの WaitGroup を使用してウィンドウが閉じるのを待つこともできます。
WaitGroup は、ゴルーチンのグループの終了を待つために使用されるカウント セマフォです。 Add メソッドを使用してカウンターをインクリメントし、Done メソッドを使用してカウンターをデクリメントし、Wait メソッドを使用してカウンターがゼロになるのを待機します。
以下はサンプル コードです:
package main import ( "fmt" "github.com/andlabs/ui" "sync" ) func main() { // 创建WaitGroup var wg sync.WaitGroup wg.Add(1) // 创建窗口 window := ui.NewWindow("Golang窗口等待关闭示例", 200, 100, false) // 处理窗口关闭事件 window.OnClosing(func(*ui.Window) bool { wg.Done() // 减少计数器 return true // 关闭窗口 }) // 显示窗口 window.Show() // 等待关闭事件 wg.Wait() fmt.Println("窗口已关闭") }
上記のコードでは、sync.WaitGroup を使用してウィンドウが閉じるのを待ちます。まず、WaitGroup を作成し、カウンターをインクリメントします。ウィンドウが閉じられると、Done メソッドを呼び出してカウンターをデクリメントします。最後に、Wait メソッドを呼び出して、カウンターがゼロになるのを待ちます。
概要
golang で GUI アプリケーションを作成する場合、ウィンドウが閉じるのを待つのが一般的な要件です。 Channel または WaitGroup を使用して待機を実装できます。チャネルを使用して待機を実装すると、より柔軟であり、複数のゴルーチンで使用できますが、メインのゴルーチンでイベントを待機する必要があります。 WaitGroup を使用して待機を実装するのは比較的簡単ですが、カウンターが正しく使用されていることを確認する必要があります。いずれにせよ、メインのゴルーチンに通知するには、ウィンドウのクローズ イベントでクローズ イベントを送信する必要があります。
以上がgolang ウィンドウが閉じるまで待つの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。