cpp

Прерывание работы потока

Чтобы прервать выполнение одного потока из другого потока нужно создать канал типа chan bool и записать в него любое логическое значение, в том момент когда нужно прервать выполнение потока. Внутри другого потока этот канал указывается в операторе select, расположенном внутри бесконечного цикла (листинг 18.20). При записи данных в канал нужно вызвать оператор return, чтобы выйти из функции и тем самым завершить работу потока.

Листинг 18.20. Прерывание работы потока

package main

import (
   "fmt"
   "time"
)

func main() {
   ch := time.Tick(time.Second * 1)
   chDone := make(chan bool)
   go func() {
      for {
         select {
         case v := <-ch:
            fmt.Println("ch:", v)
         case <-chDone:
            fmt.Println("Выполнение потока прервано")
            return
         }
      }
   }()
   time.Sleep(time.Second * 10)
   chDone <- true
   fmt.Println("Конец функции main()")
}

Результат:

ch: 2022-04-29 23:21:40.5669351 +0300 MSK m=+1.016568301
ch: 2022-04-29 23:21:41.558128 +0300 MSK m=+2.007761201
ch: 2022-04-29 23:21:42.5626701 +0300 MSK m=+3.012303301
ch: 2022-04-29 23:21:43.5645146 +0300 MSK m=+4.014147801
ch: 2022-04-29 23:21:44.5537702 +0300 MSK m=+5.003403401
ch: 2022-04-29 23:21:45.5568645 +0300 MSK m=+6.006497701
ch: 2022-04-29 23:21:46.5521719 +0300 MSK m=+7.001805101
ch: 2022-04-29 23:21:47.5542354 +0300 MSK m=+8.003868601
ch: 2022-04-29 23:21:48.553643 +0300 MSK m=+9.003276201
ch: 2022-04-29 23:21:49.5566929 +0300 MSK m=+10.006326101
Выполнение потока прервано
Конец функции main()

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp