Rumah >pembangunan bahagian belakang >Golang >tingkap golang tunggu tutup
Apabila menulis aplikasi GUI dalam golang, kita selalunya perlu menunggu pengguna menutup tetingkap untuk meneruskan langkah seterusnya. Artikel ini akan memperkenalkan cara menunggu tingkap ditutup di golang.
Dalam golang, saluran ialah struktur data yang digunakan untuk komunikasi antara gorouti. Kita boleh menggunakan saluran untuk menunggu tetingkap ditutup.
Pertama, kita perlu membuat saluran untuk menerima acara penutup. Kemudian, apabila peristiwa penutupan tetingkap berlaku, kami menghantar acara ke saluran dan menunggu di goroutine utama untuk saluran menerima acara tersebut.
Berikut ialah contoh kod:
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("窗口已关闭") }
Dalam kod di atas, kami telah menggunakan pakej andlabs/ui untuk mencipta tetingkap. Apabila tetingkap ditutup, kami menghantar acara tutup ke saluran dan menunggu di goroutine utama untuk saluran menerima acara tersebut.
Selain menggunakan saluran untuk menunggu, kami juga boleh menggunakan WaitGroup dalam pakej penyegerakan untuk menunggu tetingkap ditutup.
WaitGroup ialah semafor mengira yang digunakan untuk menunggu penghujung kumpulan goroutine. Kita boleh menggunakan kaedah Tambah untuk menambah pembilang, kaedah Selesai untuk mengurangkan pembilang, dan kaedah Tunggu untuk menunggu pembilang mencapai sifar.
Berikut ialah contoh kod:
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("窗口已关闭") }
Dalam kod di atas, kami menggunakan sync.WaitGroup untuk menunggu tetingkap ditutup. Mula-mula, kami membuat WaitGroup dan menambah kaunter. Apabila tetingkap ditutup, kami memanggil kaedah Selesai untuk mengurangkan kaunter. Akhir sekali, kami memanggil kaedah Tunggu untuk menunggu kaunter mencapai sifar.
Ringkasan
Apabila menulis aplikasi GUI dalam golang, menunggu tetingkap ditutup adalah keperluan biasa. Kita boleh menggunakan saluran atau WaitGroup untuk melaksanakan menunggu. Menggunakan saluran untuk melaksanakan menunggu adalah lebih fleksibel dan boleh digunakan dalam berbilang goroutine, tetapi anda perlu menunggu acara dalam goroutine utama. Ia agak mudah untuk menggunakan WaitGroup untuk melaksanakan menunggu, tetapi anda perlu memastikan bahawa kaunter digunakan dengan betul. Sama ada cara, kita perlu menghantar acara tutup dalam acara tutup tetingkap untuk memberitahu goroutine utama.
Atas ialah kandungan terperinci tingkap golang tunggu tutup. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!