golang thread timer --chatGPT

Q: The thread function write(ch, timer), the function is to start a thread, execute printing cyclically, and the printing condition is to trigger ch chane or the timer timer will trigger every once in a while

GPT: The following is a sample Golang code with a thread function called `write` that will perform a print operation when the `ch` channel is triggered or the timer `timer` is triggered every once in a while:

```go
package main

import (
    "fmt"
    "time"
)

func write(ch <-chan bool, interval time.Duration) {
    ticker := time.NewTicker(interval)
    defer ticker.Stop()

    for {         select {         case <-ch:             fmt.Println("Receive the trigger of channel ch, execute the print operation")         case <-ticker.C:             fmt.Println("Triggered by the timer, execute the print operation at regular intervals")         }     } }







func main() {     ch := make(chan bool)     interval := 2 * time.Second // trigger a timer every 2 seconds

    go write(ch, interval)

    // Simulate triggering the ch channel, you can send a signal to the ch channel to trigger printing when needed
    go func() {         time.Sleep(3 * time.Second)         ch <- true     }()


    // wait here for a while to watch the output
    time.Sleep(7 * time.Second)
}
```

In this example, the `write` function uses the `select` statement to listen to the `ch` channel and the timer `ticker` that fires at regular intervals. If the `ch` channel receives a signal or a timer fires, it will perform a print operation.

In the `main` function, we create a `ch` channel and a timer `ticker` that fires every 2 seconds, and then call the `write` function in a separate goroutine to start the thread. We simulate the event that triggers the `ch` channel and observe the printout after the program has been running for some time.

This example demonstrates how to handle `ch` channel triggered and timer triggered cases at the same time. According to your needs, you can adjust the value of `interval` to change the interval of timer firing.

Guess you like

Origin blog.csdn.net/glc22/article/details/132696439