context

golang Context for goroutines

♀尐吖头ヾ 提交于 2020-01-26 18:06:13
概要 goroutine 的控制 取消控制 超时控制 goroutine 之间的传值 总结 概要 golang 的提供的 channel 机制是基于 CSP(Communicating Sequencial Processes)模型的并发模式. 通过 channel, 可以很方便的写出多个 协程 (goroutine)之间协作的代码, 将顺序的代码改成并行的代码非常简单. 改造成并行的代码之后, 虽然可以更好的利用多核的硬件, 有效的提高代码的执行效率, 但是, 也带来了代码控制的问题. 并行的代码显然比顺序执行的代码更难于管理和控制, 这时, 就得靠 golang 提供的 Context 接口来帮助我们控制 goroutine 了. goroutine 的控制 goroutine 之间最基本的控制, 就是通过 channel 来交互数据: 1 func routineSample() { 2 ch := make(chan int, 10) 3 go p1(ch) 4 go c1(ch) 5 go c2(ch) 6 7 time.Sleep(10 * time.Second) 8 } 9 10 func p1(ch chan int) { 11 fmt.Println("Parent go routine!") 12 13 for i := 0; i < 10; i++ { 14

自定义控件之 Combobox

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-26 15:39:24
var ComboboxObj = function (id, url) { this.URL = url; //Ajax url this.ID = id; //combobox id this.method = 'get'; //Ajax type "POST" or "GET" this.width = 250; //combobox width this.height = 22; //combobox height this.selectValue = ""; //combobox selected value this.selectText = "";//combobox selected text this.selectIndex = 0;//combobox selected index this.initValue = ""; //combbobox initial value this.valueField = "ID"; //combobox value field this.textField = "Name"; //combobox text field this.enable = true; //combobox enable or disable this.source = new Object(); } //Set combobox width

SpringBoot :Junit java.lang.ClassNotFoundException

痞子三分冷 提交于 2020-01-26 14:00:09
1.配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zengjx</groupId> <artifactId>miaoshao</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包方式 --> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter

canvas 平移&缩放

老子叫甜甜 提交于 2020-01-26 00:43:41
1.平移 canvas其实只是一个包装器,真正起着重要作用的部分是2D渲染上下文,这才是我们真正绘制图形的地方。 然而2D渲染上下文是一种基于屏幕的标准绘制平台。它采用屏幕的笛卡尔坐标系统,以左上角(0,0)坐标为原点。 向右移动时x的坐标值增加,向下移动时y的坐标值增加。 好了了解了坐标系统之后,咱们就可以尽情的移动处理图形的位置了! 平移,也就是参照2D渲染上下文的原点(0,0),将图形从一个坐标点移动到另一个坐标点的过程! 使用方法:translate(x,y) 两个参数分别以原点为坐标 向左增加x个单位值,向下增加y个单位值。 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>变形</title> <script type="text/javascript"> window.onload = function () { var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); context.fillRect(150,

Spring整合junit

↘锁芯ラ 提交于 2020-01-25 17:45:05
应用程序的入口:main方法 junit单元测试中没有main方法也能执行 junit集合了一个main方法 该方法就会判断当前测试类中有哪些方法有@Test方法 junit就会让有@Test的方法执行 junit不会管我们有没有采用spring框架 在执行测试方法时,junit根本不知道我们是不是采用了spring框架 所以也就不会为我们读取配置文件/配置类 创建spring核心容器 由以上三点可以知道: 当测试方法执行时,没有Ioc容器,就算写了@Autowired注解,也无法实现注入 使用Junit单元测试,测试我们的配置 Spring整合junit的配置 导入spring的整合jubit的jar包 使用junit提供的注解把原有的main方法替换下来,替换成spring提供的 @Runwith 告知spring的运行器,spring和ioc创建是基于xml还是注解,并且说明位置 @ContextConfiguration locations : 指定xml文件的位置,加上classpath关键字,表示在类路径下 classes : 指定注解所在的位置 举例子: package com.xuefei.ui; import com.xuefei.domain.Account; import com.xuefei.service.IAccountService; import

自己动手模拟开发一个简单的Web服务器

寵の児 提交于 2020-01-25 17:28:56
开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的Web服务器来体会一下。 一、请求-处理-响应模型 1.1 基本过程介绍   每一个HTTP请求都会经历三个步凑: 请求-处理-响应 :每当我们在浏览器中输入一个URL时都会被封装为一个HTTP请求报文发送到Web服务器,而Web服务器则接收并解析HTTP请求报文,然后针对请求进行处理(返回指定的HTML页面、CSS样式表、JS脚本文件亦或是加载动态页面生成HTML并返回)。最后将要返回的内容转为输出流并封装为HTTP响应报文发送回浏览器。   当然,浏览器接收到响应报文后会加载HTML、CSS与JS并显示在页面中,最后成为我们看到的最终效果。 1.2 通信过程介绍   Web服务器本质上来说就是一个 Socket服务端 ,在不停地接受着客户端的请求,然后针对每一个客户端的请求进行处理,处理完毕就 即时关闭 连接。而我们的浏览器则是一个 Socket客户端 ,通过 TCP协议 向服务端发送 HTTP请求报文 。 About: Socket非常类似于电话插座,以一个电话网为例:电话的通话双方相当于相互通信的2个程序,电话号码就是IP地址。任何用户在通话之前,首先要占有一部电话机

IHttpHandler处理请求api

大城市里の小女人 提交于 2020-01-25 13:10:37
使用IHttpHandler处理请求,实现webapi功能. 研究 asp.net管道处理事件 后,可用此法实现webapi功能. 测试环境 VS2017 WIN10 IIS10 集成模式 关键接口类两个 IHttpHandlerFactory 和 IHttpHandler 处理过程 1.实现IHttpHandlerFactory,它的作用是指定由哪一个IHttpHandler来处理请求.在第7个事件时执行. 2.在第11个事件时,执行IHttpHandler.在这个处理类中,分析URL地址,使用反射找到对应的类和方法执行之. 具体做法 1.新建一个.net framework类库项目,添加两个类,分别实现IHttpHandlerFactory IHttpHandler (注意添加System.Web程序集) // 实现IHttpHandlerFactory public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated) {    // 类的作用就是返回一个IHttpHandler    return new ApiHandler(); } // ApiHandler()类 实现IHttpHandler public void

音视频:使用三种方式绘制图片

亡梦爱人 提交于 2020-01-25 12:29:07
由于视频的渲染,本质上就是显示一张一张的图片,所以学习第一步就是学习显示图片。 这次我们使用三种不同的方式来显示一张图片。 ImageView 使用 ImageView 是最简单也是最常用的方式了。 context?.let { image.setImageBitmap(decodeStream(it.assets.open("images/test_image.jpeg"))) } SurfaceView 我们知道View是通过刷新来重绘视图,系统通过发出 VSSYNC 信号来进行屏幕的重绘,刷新的时间间隔是 16 ms,如果我们可以在 16 ms 以内将绘制工作完成,则没有任何问题,如果我们绘制过程逻辑很复杂,而且我们的界面更新还非常频繁,这时候就会造成界面的卡顿,影响用户体验。为此Android提供了 SurfaceView 来解决这一问题。 SurfaceView 和 View 有什么区别? View 适用于被动更新的场景,而 SurfaceView 适用于主动更新的情况,比如频繁的刷新界面。(具体原因见下条) View 在主线程中对页面进行刷新,而 SurfaceView 则开启一个子线程来对页面进行刷新。(最本质的区别) View 在绘图的时候没有双缓冲机制,而 SurfaceView 在底层中实现了双缓冲机制。 代码 最后肯定要上代码的 [狗头]

appium定位元素

家住魔仙堡 提交于 2020-01-25 11:23:28
一、常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Inspector:Appium自带的一个功能,只有mac下可以使用该功能 下面是用monitor抓取到的页面元素 下面使用Appium Inspector定位的元素 二、元素定位 1.格式:find_element_by_定位方式(value) 通过id定位 (取resource-id的值): driver.find_element_by_id("com.wuba.zhuanzhuan:id/azo") 也可以直接用id后面的内容driver.find_element_by_id("azo") 通过class_name定位 (取class的内容) driver.find_element_by_class_name("android.widget.RelativeLayout") 通过xpath定位 (取xpath得内容) driver.find_element_by_xpath("//android.widget.LinearLayout[1]/android.widget.XXX") 通过text定位 (需要使用uiautomator的定位方式,使用text的内容) driver

Appium+Python之元素定位和操作

扶醉桌前 提交于 2020-01-25 11:19:51
一、常用识别元素的工具 uiautomatorviewer:Android SDK自带的一个工具,在tools目录下 二、元素定位 1.格式:find_element_by_定位方式(value) 通过id定位 (取resource-id的值): driver.find_element_by_id("com.wuba.zhuanzhuan:id/azo") 也可以直接用id后面的内容driver.find_element_by_id("azo") 通过class_name定位 (取class的内容) driver.find_element_by_class_name("android.widget.RelativeLayout") 通过xpath定位 (取xpath得内容) driver.find_element_by_xpath("//android.widget.LinearLayout[1]/android.widget.XXX") 通过text定位 (需要使用uiautomator的定位方式,使用text的内容) driver.find_elements_by_android_uiautomator("new UiSelector().text(\"+关注\")") 使用这里需要注意一下,通过text定位的结果是个list,不能直接click。所以如果要点击需要取数组的值