channler多路选择和超时控制

Posted quang3727

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了channler多路选择和超时控制相关的知识,希望对你有一定的参考价值。


一.多渠道的选择和超时控制select
1.多需渠道选择:
当任何一个case不处于阻塞情况会输出case内的逻辑,
当所有的都没有准备好都处于阻塞情况的话select出现defalt就会执行defalut内代码。
select
case ret := <-retCh1:
fmt.Println(ret)
case ret := <--retCh2:
fmt.Println(ret)
default:
t.Errorf("No one returned")

2.超时控制:我们不希望channler执行超过限制时间时可以使用超时控制,一旦channler执行时间超过超时控 制设置的时间可以做些异常或者其他逻辑处理
select
case ret := <-retCh1:
fmt.Println(ret)
case <-time.After(time.Second* 1):
t.Errorf("time out")


----------------------------------------------------------------------------------------------
package select_test

import (
"fmt"
"testing"
"time"
)

func otherTask()
fmt.Println("working on something else")
time.Sleep(time.Millisecond * 100) //等待100毫秒
fmt.Println("Task is done.")

func TestService(t *testing.T)
//fmt.Println(service())
//otherTask()
fmt.Println("12")

func service() string
time.Sleep(time.Millisecond * 500) //等待500毫秒
return "Done"

//使用channler处理
func AsyncService() chan string
retch := make(chan string)
go func()
ret := service()
fmt.Println("returned result.")
retch <- ret //把结果放在channler里
fmt.Println("service exited")
()
return retch

func TestAsyncService(t *testing.T)
select
case ret := <-AsyncService():
fmt.Println(ret)
case <-time.After(time.Millisecond * 10):
t.Errorf("time out")


//(当chan执行时间超过超时设置的时间)输出超时 :
--- FAIL: TestAsyncService (0.01s)
select_test.go:41: time out
FAIL

以上是关于channler多路选择和超时控制的主要内容,如果未能解决你的问题,请参考以下文章

FPGA—多路选择器(简单逻辑组合电路)

4、试写出4选1多路选择器的VHDL描述,假设选择控制信号为S1、S0,输入信号为d3,d2,d1,d0,输出信号为y。

在 *nix 中处理多路复用套接字的读取超时

STM32F103学习笔记(10)——I2C多路复用器TCA9548A使用

STM32F103学习笔记(10)——I2C多路复用器TCA9548A使用

STM32F103学习笔记(10)——I2C多路复用器TCA9548A使用