宏任务和微任务

目录

一、前言

二、宏任务和微任务有哪些?

三、执行顺序

1、事件循环

事件循环的六个阶段

2、题目练习:

练习一

练习二

3、宏任务之间的执行顺序

4、微任务之间的执行顺序

process.nextTick()

5、vue中的nextTick


一、前言

js任务分为同步任务和异步任务,异步任务又分为宏任务和微任务,其中异步任务属于耗时的任务。

二、宏任务和微任务有哪些?

宏任务:整体代码script、setTimeout、setInterval、setImmediate、i/o操作(输入输出,比如读取文件操作、网络请求)、ui render(dom渲染,即更改代码重新渲染dom的过程)、异步ajax等

微任务:Promise(then、catch、finally)、async/await、process.nextTick、Object.observe(⽤来实时监测js中对象的变化)、 MutationObserver(监听DOM树的变化)

三、执行顺序

js代码在执行的时候,会先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中,当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后,再将异步宏任务从队列中调入主线程执行,一直循环至所有的任务执行完毕(完成一次事件循环EventLoop)。

注意:

每个异步宏任务执行完之后,都会检查是否存在待执行的微任务;如果有,则执行完所有的微任务之后,再继续执行下一个宏任务。

1、事件循环

一次事件循环只能处理一个宏任务,一次事件循环可以将所有的微任务处理完毕。

事件循环的六个阶段

事件循环是⼀个循环体,在循环体中有 6 个阶段,在每个阶段中,都有⼀个事件队列,不同的事件队列存储了不同类型的异步API 的回调函数。 事件循环在每次执⾏的时候,都有6 个阶段的事情要做:

 

2、题目练习:

练习一

setTimeout(function () {
 console.log('1');
})
new Promise(function (resolve) {
 console.log('2');
 resolve();
}).then(function () {
 console.log('3');
})
console.log('4');
//打印顺序 2 4 3 1

分析:
1、遇到setTimeout,异步宏任务将其放到宏任务列表中,命名为time1

2、new Promise 在实例化过程中所执⾏的代码都是同步执⾏的( function 中的代码),输出2
3、 Promise 中注册的回调函数放到微任务队列中,命名为 then1
4、 执⾏同步任务 console.log('4') ,输出 4 ,⾄此执⾏栈中的代码执⾏完毕;
5、 从微任务队列取出任务 then1 到主线程中,输出 3 ,⾄此微任务队列为空;
6、 从宏任务队列中取出任务 time1 到主线程中,输出 1 ,⾄此宏任务队列为空

练习二

console.log(1);
setTimeout(function () {
  console.log(2);
  let promise = new Promise(function (resolve, reject) {
    console.log(3);
    resolve();
  }).then(function () {
    console.log(4);
  });
}, 1000);
setTimeout(function () {
  console.log(5);
  let promise = new Promise(function (resolve, reject) {
    console.log(6);
    resolve();
  }).then(function () {
    console.log(7);
  });
}, 0);
let promise = new Promise(function (resolve, reject) {
  console.log(8);
  resolve()
}).then(function () {
  console.log(9);
}).then(function () {
  console.log(10)
});
console.log(11);
//执行顺序:1 8 11 9 10 5 6 7 2 3 4

分析:

1、 执⾏同步任务 console.log(1) ,输出 1
2、 遇到 setTimeout 放到宏任务队列中,命名 time1
3、 遇到 setTimeout 放到宏任务队列中,命名 time2
 
4、new Promise 在实例化过程中所执⾏的代码都是同步执⾏的( function 中的代码),输出8
5、 Promise 中注册的回调函数放到微任务队列中,命名为 then1
6、 Promise 中注册的回调函数放到微任务队列中,命名为 then2
7、 执⾏同步任务 console.log(11), 输出 11
8、 从微任务队列取出任务 then1 到主线程中,输出 9
9、 从微任务队列取出任务 then2 到主线程中,输出 10 ,⾄此微任务队列为空;
10、从宏任务队列中取出 time2( 注意这⾥不是 time1 的原因是 time2 的执⾏时间为 0);
11、 执⾏同步任务 console.log(5) ,输出 5
12、new Promise 在实例化过程中所执⾏的代码都是同步执⾏的( function 中的代码),输出6
13、 Promise 中注册的回调函数放到微任务队列中,命名为 then3 ,⾄此宏任务time2执⾏完成;
14、 从微任务队列取出任务 then3 到主线程中,输出 7 ,⾄此微任务队列为空;
15、 从宏任务队列中取出 time1 ,⾄此宏任务队列为空;
16、 执⾏同步任务 console.log(2) ,输出 2
17、new Promise 在实例化过程中所执⾏的代码都是同步执⾏的( function 中的代码),输出3
18、 Promise 中注册的回调函数放到微任务队列中,命名为 then4 ,⾄此宏任务time1执⾏完成;
19、 从微任务队列取出任务 then4 到主线程中,输出 4 ,⾄此微任务队列为空。

3、宏任务之间的执行顺序

宏任务有setTimeout、setInterval、setImmediate、i/o操作、异步的ajax,它们之间的执行也是有先后顺序,它们之间的执行顺序是:
setImmediate --> setTimeout --> setInterval --> i/o操作 --> 异步ajax

例子:

let axios = require('axios');
let fs = require('fs');
console.log('begin');
fs.readFile('1.txt',(err,data)=>{
	console.log('fs');
});
axios.get('https://api.muxiaoguo.cn/api/xiaohua?api_key=fd3270a0a9833e20').then(res=>{
	console.log('axios');
});
setTimeout(()=>{
	console.log('setTimeout')
},0);
setImmediate(()=>{
  console.log('setImmediate');
});
(async function (){
	console.log('async')
})();
console.log('end');
//执行顺序:begin async end setTimeout setImmediate fs axios

setImmediate没有时间参数,它与延迟 0 毫秒的 setTimeout() 回调⾮常相似。所以当setTimeout延迟时间也是0毫秒时,谁在前面就先执行谁。此外如果setTimeout延迟时间不是0毫秒,它的执行顺序会在 i/o 操作之后。

4、微任务之间的执行顺序

微任务有Promise(then、catch、finally)、process.nextTick等,它们之间执行的先后顺序是:
process.nextTick --> Promise

例子:

console.log('begin');
Promise.resolve().then(()=>{
  console.log('promise');
})
process.nextTick(()=>{
	console.log('nextTick');
});
console.log('end');
//执行顺序:begin end nextTick promise

process.nextTick()

process表示进程,它是一个对象,对象里面有一个nextTick。

nextTick会在上一次事件循环结束,然后在下一次事件循环开始之前执行。

5、vue中的nextTick

Vue.nextTick() 是vue的全局api,它主要用来在下次dom更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的dom。

由于vue的更新机制是异步的,所以当数据修改之后,dom还停留在更新之前,此时想要获取更新后的dom,可以使用nextTick,表示的是下次dom更新循环结束后执行的回调。
应用场景:created 中获取dom可以使用nextTick

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
	<script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js"></script>
</head>

<body>
	<div id="app">
		<ul ref="container">
			<li v-for="(item,index) in arr" :key="index">{{item}}</li>
		</ul>
		<button @click="add">增加</button>
	</div>
	<script>
		new Vue({
			el: "#app",
			data() {
				return {
					arr: ['zhangsan', 'lisi', 'wangwu']
				}
			},
			created() {
				// 使用nextTick可以在created生命周期获取dom节点
				this.$nextTick(() => {
					console.log(this.$refs.container);
				})
			},
			methods: {
				add() {
					this.arr.push(parseInt(Math.random() * 10));
					// 使用nextTick获取数据更新后的dom
					this.$nextTick(() => {
						console.log(this.$refs.container.childNodes);
					});
				}
			}
		})
	</script>
</body>

</html>
  • 28
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
目录 网络驱动程序设计指南 1 第一部分 网络驱动程序 2 第一章 网络驱动程序设计指南的向导 3 第二章 内核模式驱动程序的网络结构 6 2.1 Windows 2000 网络结构和OSI模型 6 2.2 NDIS驱动程序 7 2.2.1 NDIS微端口驱动程序 7 2.2.2 NDIS中间层驱动程序 8 2.2.3 NDIS协议驱动程序 9 2.3 TDI驱动程序 9 2.4 网络驱动程序环境 9 2.4.1 无连接环境的网络驱动程序 10 2.4.2 面向连接环境下的网络驱动程序 10 2.4.3 WAN网络驱动程序的环境 11 第三章 网络驱动程序编程要点 13 3.1 可移植性 13 3.2 多处理器支持 13 3.3 IRQL 14 3.4 同步和指示 14 3.5 包结构 16 3.6 使用共享内存 17 3.7 异步I/O和完成函数 17 第二部分 微端口NIC驱动程序 19 第一章 NDIS NIC微端口驱动程序 20 1.1 NIC微端口驱动程序类型 20 1.2 网络接口卡支持 20 1.3 微端口驱动程序代码的重要特征 22 1.3.1 MiniportXxx函数 22 1.3.2 与NDIS库链接 22 1.3.3 微端口适配器环境 22 1.3.4 VC环境 23 1.3.5 网络OID 23 1.4 驱动程序例子 24 第二章 NIC微端口操作和函数概要 25 2.1 NIC微端口操作 25 2.1.1 初始化NDIS库和注册微端口驱动程序 25 2.1.2 注册网络接口卡 25 2.1.3 对查询和设置微端口信息作出响应 26 2.1.4 产生,激活,去活,和删除虚连接 26 2.1.5 发送数据 27 2.1.5.1 多包发送 27 2.1.5.2 单包发送 28 2.1.6 指示和传递接收的数据 28 2.1.6.1 多包接收 29 2.1.6.2 单包接收 29 2.1.7 指示状态 30 2.1.8 复位网络接口卡 30 2.1.9 终止一个微端口NIC驱动程序 30 2.2 微端口上层函数 30 2.2.1 无连接微端口的上层函数 31 2.2.2 面向连接微端口的上层函数 32 2.3 由微端口调用的NDIS函数 33 2.3.1 NDIS提供的初始化和注册函数 34 2.3.2 NDIS提供的硬件设置函数 35 2.3.3 NDIS提供的I/O端口函数 36 2.3.4 NDIS数据的与DMA相关的函数 37 2.3.5 NDIS提供的中断处理函数 38 2.3.6 NDIS提供的同步函数 38 2.3.7 NDIS提供的状态函数 39 2.3.8 NDIS为无连接微端口提供的发送和接收函数 39 2.3.9 NDIS为面向连接微端口提供的发送和接收函数 40 2.3.10 NDIS提供的带外数据宏 41 2.3.11 NDIS提供的包和缓存处理函数 41 2.3.12 NDIS提供的支持函数 43 2.3.13 NDIS提供的媒体相关宏 46 第三章 NIC微端口驱动程序入口点和初始化 47 3.1 NDIS微端口驱动程序入口函数 47 3.1.1 初始化包裹 47 3.1.2 注册微端口 48 3.1.2.1 指定NDIS版本号 48 3.1.2.2 注册MiniportXxx函数 48 3.1.2.3 为中断支持的注册处理程序 50 3.1.2.4 为无连接微端口选择一个发送函数 51 3.1.2.5 为无连接微端口选择接收函数 51 3.1.2.6 注册一个分配完成处理程序 52 3.1.2.7 注册一个挂起检测(CheckForHang) 处理程序 52 3.2 NDIS微端口初始化 53 3.2.1 注册一个NIC 53 3.2.1.1 分配一个适配器指定的环境区域 54 3.2.1.2 读取配置信息 54 3.2.1.3 注册NIC 54 3.2.2 声明资源 55 3.2.2.1 分配内存 55 3.2.2.2 注册端口 56 3.2.2.3 总线管理器DMA设备初始化 56 3.2.2.4可编程I/O设备初始化 57 3.2.2.5 内存映射设备初始化 58 3.2.2.6 从属DMA设备初始化 58 3.2.3 注册一个中断 59 3.2.4 注册一个关闭函数 59 3.2.5 初始化轮询时钟 59 3.2.6 在初始化当中的同步 60 3.2.7 在初始化时处理错误 60 3.3 查询微端口信息 61 3.4 减少微端口初始化时间 61 第四章 数据传输 64 4.1 中断处理 64 4.2 DPC处理程序 66 4.3 带外(OOB)数据包 66 4.3.1 等待发送的OOB数据 67 4.3.2 接收的OOB数据 68 4.4 发送包 69 4.4.1 无连接微端口的多包传送 70 4.4.1.1 串行微端口的多包传送 70 4.4.1.2 非串行微端口的多包传送 71 4.4.2 无连接微端口的单包发送 71 4.4.3 面向连接微端口的多包发送 72 4.4.4 发送数据前的内存同步 73 4.4.5 发送步骤 74 4.4.5.1 在总线控制器DMA NIC上发送包 74 4.4.5.2 在PIO设备上发送单包 76 4.4.5.3 使用板上内存发送包 77 4.5 非串行微端口 78 4.5.1 非串行微端口的NDIS要求 78 4.5.2 非串行微端口的驱动程序内部要求 78 4.6 接收数据 79 4.6.1 无连接和面向连接微端口的多包接收 79 4.6.2 无连接微端口的单包接收 82 4.6.3 接收数据的高速缓存(Cache)因素 83 4.6.4 接收数据的步骤 83 4.6.4.1 接收期间的包管理 84 4.6.4.2 在总线控制器DMA NIC上接收数据 84 4.6.4.3 在PIO NIC上接收数据 85 4.6.4.4 在内存映射设备上接收数据 85 4.7 保持统计量 85 4.8 802.1P 包的优先权 86 4.8.1 查询802.1p优先权支持 87 4.8.2 802.1优先权的包支持 87 4.8.3 为发送和接收指定包的大小 88 4.8.4 默认情况下禁止802.1p的优先权支持 88 第五章 获取和设置WMI的微端口信息及NDIS支持 89 5.1 NDIS管理信息和OID 89 5.2 查询微端口信息 89 5.2.1 无连接微端口的查询 90 5.2.2 面向连接微端口的查询 91 5.3 设置微端口信息 92 5.3.1 为无连接微端口设置信息 92 5.3.2 为面向连接微端口设置信息 92 5.3.3 设置微端口信息的时机 93 5.4 报告硬件状态 93 5.5 WMI的NDIS支持 94 5.5.1 用WMI注册与注销NDIS微端口 94 5.5.2 OID和微端口状态的GUID映射 94 5.5.3 支持命名VC 94 5.5.4 NDIS支持的WMI操作 95 5.5.5 向WMI注册标准微端口OID 95 5.5.6 向WMI注册的标准微端口状态 97 5.5.7 定制OID与状态指示 98 5.5.7.1 填充NDIS_GUID 98 5.5.7.2 包括MOF文件 99 第六章 微端口的电源管理 100 6.1 电源管理的需求与可选的OID 100 6.2 网络设备电源状态 101 6.3 网络唤醒事件 102 6.3.1 连接改变唤醒 102 6.3.2 网络唤醒帧 102 6.3.3 魔包唤醒 103 6.3.4 启用唤醒事件 103 6.3.5 处理唤醒事件 103 6.4 处理OID_PNP_QUERY_POWER 104 6.5 处理OID_PNP_SET_POWER 104 6.5.1 转入睡眠状态 104 6.5.2 转入工作状态 104 6.6 早期微端口的电源管理 105 第七章 重置,停止和关闭 106 7.1 硬件重置(Reset) 106 7.2 停止(Halt)处理程序 106 7.3 关闭(Shutdown)处理程序 107 第八章 广域网微端口 NIC驱动程序 109 8.1 RAS 体系结构 109 8.2 NDISWAN 概述 111 8.3 网络卡、绑定、和连接 113 8.4 广域网微端口驱动程序的实现 114 8.4.1 标准广域网微端口驱动程序与局域网微端口驱动程序的区别 115 8.4.2 CoNDIS广域网微端口驱动程序的附加特性 115 8.4.3 广域网微端口驱动程序提供的服务 116 8.4.3.1 注册为广域网微端口驱动程序 116 8.4.3.2 查询广域网微端口驱动程序的信息 117 8.4.3.3 设置广域网小段口驱动程序的状态 122 8.4.3.4 在广域网微端口驱动程序上发送数据 123 8.4.4 广域网微端口驱动程序做出的指示 125 8.4.4.1 指示从标准广域网微端口驱动程序接收数据 125 8.5 广域网包的组帧 128 8.5.1 异步帧结构 128 8.5.2 X.25帧结构 128 8.5.3 ISDN和Switched-56K帧结构 128 8.6 标准NDIS之上的电话服务扩展 128 8.6.1 NDISTAPI概述 129 8.6.2 线路设备、地址和呼叫 129 8.6.3 设置和查询请求 130 8.6.4 保持状态信息 130 8.6.5 建立句柄 131 8.6.6 TAPI注册 131 8.6.7 TAPI初始化 132 8.6.8 打开线路 133 8.6.9 接受内入呼叫 133 8.6.10 产生TAPI呼叫 134 8.6.11 主动事件处理 135 8.6.12 Line-Up指示 135 8.6.13 关闭呼叫线路 137 8.6.14 NDISTAPI接口 139 8.7 使用支持电话服务的CoNDIS扩展 143 8.7.1 NDPROXY概述 143 8.7.2 CoNDIS TAPI注册 144 8.7.3 CoNDIS TAPI初始化 144 8.7.4 建立外出呼叫 146 8.7.5 接受内入呼叫 147 8.7.6 CoNDIS TAPI关闭 150 8.7.7 语音流对呼叫管理器的要求 151 8.7.7.1 响应OID_CO_TAPI_LINE_CAPS查询 151 8.7.7.2 为外出呼叫指定参数 151 8.7.7.3 为内入呼叫指定参数 152 8.7.8 在面向连接NDIS之上支持电话服务的非广域网专用的扩展 152 第九章 任务卸载 153 9.1 查询任务卸载能力 153 9.1.1 报告NIC的校验和性能 154 9.1.2 报告NIC的IP安全性性能 155 9.1.3 报告NIC的TCP包分段性能 157 9.2 启用任务卸载能力 157 9.3 停用任务卸载能力 158 9.4 访问Per-Packet信息 158 9.5 卸载TCP/IP校验和任务 159 9.6 卸载IP安全任务 161 9.7 卸载大TCP包分段 164 9.8 卸载组合 165 9.9 使用注册表键值激活和禁止任务卸载 166 第十章 负载平衡和失效替换 166 10.1 关于LBFO 167 10.2 指定对LBFO的支持 168 10.3 在微端口驱动程序上实现LBFO 168 10.3.1 初始化微端口束 168 10.3.2 平衡微端口驱动程序的工作量 169 10.3.3 在主微端口失效后提升一个次微端口 169 第十一章 快速转发路径 169 11.1 关于FFP 170 11.1.1 使用一个NIC的FFP 170 11.1.2 使用多个NIC的FFP 170 11.1.3 IP转发 171 11.1.4 FFP和包过滤 171 11.2 NIDS中的FFP支持 172 11.3 为IP转发在微端口实现FFP 172 第十二章 带WDM低级接口的微端口驱动程序 174 12.1 WDM低层微端口 174 12.2 注册WDM低层的微端口函数 174 12.3 初始化WDM低层微端口 175 12.4 发布命令与远程设备通信 176 12.4.1 在总线上发送包 176 12.4.2 在总线上接收包 176 12.5 WDM低层的实现要点 176 12.6 WDM低层的编译标志 177 第十三章 IrDA微端口NIC驱动程序 178 13.1 IrDA微端口驱动程序简述 178 13.2 IrDA体系结构 179 13.3 IrDA协议驱动程序 179 13.4 IrDA介质特征 179 13.4.1 通信连接速度 180 13.4.2 通信连接回转时间 180 13.4.3 接收器同步 181 13.5 IrLAP帧格式 182 13.5.1 帧格式简述 182 13.5.2 帧信息的使用 183 13.5.3 地址成员 183 13.6 IrDA微端口驱动程序包编码方案 183 13.6.1 SIR编码 184 13.6.2 MIR编码 184 13.6.3 FIR编码 184 13.7 发送和接收帧序列 185 13.8 即插即用 185 13.8.1 非即插即用外部串行连接SIR适配器 185 13.8.2 非即插即用内部SIR适配器或者象串口一样错误地呈现于外的内部SIR适配器 186 13.8.3 即插即用外部串行连接SIR适配器 186 13.8.4 即插即用内部SIR适配器 186 13.8.5 非即插即用总线连接FIR适配器 187 13.8.6 即插即用总线连接FIR适配器 187 第三部分NDIS中间层驱动程序和TDI驱动程序 189 第一章 NDIS中间层驱动程序 189 1.1中间层驱动程序的DriverEntry函数 191 1.1.1 注册NDIS中间层驱动程序 191 1.1.1.1注册中间层驱动程序的Miniport 192 1.1.1.2注册中间层驱动程序的协议 194 1.2 中间层驱动程序的动态绑定 196 1.2.1 打开中间层驱动程序下层的适配器 197 1.2.2 微端口初始化 198 1.2.3 中间层驱动程序查询和设置操作 199 1.2.4作为面向连接客户程序注册中间层驱动程序 201 1.3中间层驱动程序数据包管理 203 1.4 中间层驱动程序的限制 205 1.5 中间层驱动程序接收数据 206 1.5.1下边界面向无连接的中间层驱动程序接收数据 206 1.5.2下边界面向连接的中间层驱动程序接收数据 208 1.5.3向高层驱动程序指示接收数据包 209 1.6通过中间层驱动程序传输数据包 210 1.6.1传递介质相关信息 211 1.7处理中间层驱动程序的PnP事件和PM事件 212 1.7.1处理OID_PNP_XXX查询和设置 213 1.7.2中间层驱动程序ProtocolPnPEvent处理程序的实现 214 1.7.3处理规定的电源请求 214 1.8中间层驱动程序复位操作 215 1.9中间层驱动程序拆除绑定操作 216 1.10中间层驱动程序状态指示 217 第二章 NDIS协议驱动程序 219 2.1 协议DriverEntry及其初始化 220 2.1.1注册NDIS协议驱动程序 220 2.1.2 打开中间层驱动程序低层的适配器 223 2.1.3 协议驱动程序查询和设置操作 224 2.1.4作为呼叫管理器或者面向连接客户程序进行注册 225 2.2 协议驱动程序数据包管理 229 2.3 协议驱动程序的动态绑定 230 2.4 协议驱动程序接收数据 231 2.4.1下边界面向无连接的中间层驱动程序接收数据 231 2.4.1.1 在中间层驱动程序中实现ProtocolReceivePacket处理程序 232 2.4.1.2 在协议驱动程序中实现ProtocolReceive处理程序 233 2.4.1.3 从面向无连接协议驱动程序中访问OOB数据信息 234 2.4.2 面向连接协议驱动程序接收数据 234 2.4.2.1 ProtocolCoReceivePacket处理程序实现 235 2.4.2.2 从面向连接协议驱动程序中访问OOB数据信息 235 2.5 发送协议驱动程序创建的数据包 236 2.5.1 从面向无连接协议驱动程序发送数据包 236 2.5.1.1面向无连接协议驱动程序传递介质相关信息 237 2.5.2 面向连接协议驱动程序发送数据包 238 2.5.2.1面向连接协议驱动程序传递介质相关信息 238 2.6处理协议驱动程序的PnP事件和PM事件 239 2.7协议驱动程序复位操作 240 2.8协议驱动程序拆除绑定操作 241 2.9协议驱动程序状态指示 241 第三章 TDI传输器及其客户 243 3.1 传输驱动程序接口(TDI) 243 3.2 TDI设备对象 245 3.3 TDI文件对象 246 3.3.1代表传输地址的文件对象 247 3.3.2代表连接端点的文件对象 247 3.3.3代表控制信道的文件对象 248 3.4 TDI传输驱动程序例程 248 3.5 TDI核心模式客户交互 249 3.6 TDI请求及事件 250 第四章 TDI例程、宏和回调 251 4.1 TDI驱动程序初始化 251 4.1.1 注册TDI传输驱动程序 252 4.1.2 卸载和注销TDI传输驱动程序 252 4.2 TDI驱动程序调度例程 253 4.3 TDI IOCTL请求 254 4.4 TDI 客户回调 255 4.5 TDI 库函数和宏 257 第五章 TDI操作 260 5.1打开传输地址 260 5.2打开连接端点 261 5.3打包并提交IOCTL请求 262 5.4设置和查询信息 262 5.5建立端端连接 263 5.6发送和接收面向连接数据 264 5.7发送和接收无连接数据 266 5.8面向连接和面向无连接传输 267 5.9请求传输相关操作 268 5.10接收错误通知 268 5.11断开端端连接 268 5.12关闭连接端点 269 5.13关闭传输地址和控制信道 269 第六章Windows Sockets的传输助手DLLS 271 6.1 Windows Sockets Helper DLL结构 271 6.2用WSH DLL通信 271 6.3配置WSH DLL 272 6.4WSH DLL同步 272 6.5用WSH DLL支持连接和断开数据 273 6.5.1客户应用程序和连接数据 273 6.5.2服务器应用程序和连接数据 273 6.5.3断连(disconnect)数据 274 6.6WSH DLL函数总览 274 第四部分面向连接的网络驱动程序接口标准(NDIS) 276 第一章 面向连接的网络驱动程序接口标准(NDIS) 276 1.1面向连接环境 276 1.2使用AFs,VCs,SAP和Parties 277 1.2.1地址族 277 1.2.2虚连接 277 1.2.3 SAPs 278 1.2.4 Parties 278 1.3服务质量 278 1.4MCM和呼叫管理器有何不同 278 1.4.1初始化的不同 279 1.4.2对NdisXxx函数调用的不同 279 1.4.3虚连接的不同 279 1.5面向连接的时间特性 280 1.6面向连接操作 280 1.6.1面向连接操作总结 280 1.6.1.1由客户执行的面向连接操作 280 1.6.1.2由呼叫管理器执行的面向连接操作 281 1.6.1.3由微端口执行的面向连接操作 282 1.6.2地址族和SAPs上的操作 283 1.6.2.1注册并打开一个地址族 283 1.6.2.2注册一个SAP 284 1.6.2.3注销SAP 285 1.6.2.4关闭一个地址族 285 1.6.3 VCs上的操作 286 1.6.3.1创建VC 286 1.6.3.2激活VC 287 1.6.3.3使VC去活 288 1.6.3.4删除VC 289 1.6.4创建呼叫 289 1.6.4.1进行呼叫 290 1.6.4.2指示内入呼叫 291 1.6.5改变活动VC的QoS 292 1.6.5.1客户发起的改变呼叫参数请求。 292 1.6.5.2改变呼叫参数的内入请求 293 1.6.6增加和删除Parties 293 1.6.6.1把一个Party加入到多点呼叫 293 1.6.6.2从多点呼叫中删除Party 294 1.6.6.3从多点呼叫中删除一个Party的内入请求 295 1.6.7发送并接收数据 295 1.6.7.1在VC上发送包 295 1.6.7.2接收VC上的包 296 1.6.8断开呼叫 297 1.6.8.1客户发起的关闭呼叫请求 297 1.6.8.2关闭呼叫的内入请求 298 1.6.9获取并设置信息 298 1.6.9.1查询或设置信息 298 1.6.9.2指示微端口状态 299 1.6.10重置 299 第五部分 安装网络组件 301 第一章 安装网络组件 301 1.1用于安装网络组件的组件和文件 301 1.2创建网络INF文件 302 1.2.1网络INFS文件名的约定 302 1.2.2网络INF文件的版本节 302 1.2.3网络INF文件的模型节 303 1.2.4 INF文件的DDInstall节 304 1.2.5删除节 306 1.2.6 ControlFlags节 306 1.2.7网络INF文件的add-registry-sections 306 1.2.7.1设置静态参数 307 1.2.7.2 为WAN适配器说明WAN端点 307 1.2.7.3为ISDN适配器说明ISDN键和值 307 1.2.7.4安装多协议WAN NICs 309 1.2.7.5请求安装另一个网络组件 310 1.2.7.6说明NetCLient组件的名字和提供者 310 1.2.7.7增加HelpText值 311 1.2.7.8为通知对象增加注册值 311 1.2.7.9向Ndi键增加服务相关值 311 1.2.7.10说明绑定接口 312 1.2.7.11为高级属性页说明配置参数 314 1.2.7.12为网络适配器说明定制属性页 315 1.2.7.13说明过滤器服务值 315 1.2.7.14说明束成员关系 317 1.2.7.15 Window 2000中不用的 Window 95/98 Ndi值和键 317 1.2.8 DDInstall.Service节 318 1.2.9 NetworkProrider和PrintProvider节 318 1.2.9.1包含一个NetworkProvider节 319 1.2.9.2 包括一个PrintProvider节 319 1.2.10 Winsock节 320 1.2.11网络组件安装需求总结 322 1.2.11.1网络适配器的安装需求 322 1.2.11.2网络协议安装要求 323 1.2.11.3中间层网络驱动程序的安装需求 324 1.2.11.4网络过滤器驱动程序的安装需求 325 1.2.11.5网络客户的安装需求 326 1.2.11.6网络服务的安装请求 327 第二章 网络组件的通知对象 328 2.1关于通知对象 328 2.1.1 通知对象图 329 2.1.2通知类型 329 2.1.3网络组件的安装 329 2.1.4删除网络组件 330 2.1.5升级网络组件 330 2.1.6显示并改变属性 330 2.1.7网络配置 331 2.2创建通知对象 331 2.2.1装载通知对象DLL和类对象 331 2.2.2定义通知对象 332 2.2.3创建并初始化通知对象实例 332 2.2.4安装,升级和删除组件 333 2.2.5为组件生成属性页 333 2.2.6设置环境来显示属性 334 2.2.7评价网络配置的变化 334 2.2.8将组件变化加入注册表 335 2.2.9配置组件驱动程序 335

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值