Rumah  >  Artikel  >  pembangunan bahagian belakang  >  tingkap golang tunggu tutup

tingkap golang tunggu tutup

WBOY
WBOYasal
2023-05-10 21:55:36395semak imbas

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.

  1. Gunakan saluran untuk melaksanakan menunggu

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.

  1. Gunakan penyegerakan.WaitGroup untuk menunggu

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn