线程同步与异步套接字编程 主讲人:孙鑫 http://www.sunxin.org.

Slides:



Advertisements
Similar presentations
专业介绍 计算机网络技术专业(智能建筑及数字社区技术方向) 广州市广播电视大学 信息与工程学院
Advertisements

牙刷十大創意行銷企劃 指導老師:簡南山老師 4A 劉家汶 4A 楊雅涵 4A 許晉嘉 4A 何怡蓁 4A 莊倖怡 0A20F144 王珮.
学年度工作总结 —— 上海建桥学院 —— 上海建桥学院 实验室与资产管理处 实验室与资产管理处.
软件开发技术基础 第 3 章 操作系统及程序设计 讲授教师:卫颜俊. 主 要 内 容 主 要 内 容 操作系统及其功能 进程管理应用程序设计 内存管理应用程序设计 设备与文件管理应用程序设计 人机接口管理应用程序设计.
從「穹頂之下」電影看環境議題 第六小組 4a 黃士齊 4a 吳承翰 4a 洪濬森 4a 郭哲宇 0a40f226 湯思祺 林喬舜.
职业指导服务系统 欢迎了解职业指导服务系统!
南山中學 102學年度 性別平等教育週性別教育 性騷擾防治.
網路程式設計 (Network Programming)
第10章 领导职能与有效指挥 渤海大学 终身教授 单凤儒.
考点作文十大夺魁技法 第28课时 写作(二) 考点作文十大夺魁技法 6-10 ·新课标.
香港扶貧計劃 關愛基金 Group 5 組員 馬曉真 余葆 董賽騫 蕭雪兒.
舊石器時代 位置: 亞洲大陸東緣,西太平洋弧狀列島一部份 背景 形成: 兩千多萬年前逐漸隆起,形成島嶼 生物: 大角鹿、猛瑪象、亞洲大陸原始人 臺東 長濱文化 苗栗 網形文化 臺南 左鎮人目前臺灣發現最早人類化石 代表 文化 1.住在海邊洞穴-短期定居小型隊群 2.以採集、狩獵為生 3.使用礫石砍伐器、片器、尖器.
一百零一年溪口國小 學校日 班級: 三年三班 教師: 張慈麟.
市场研究与判断 城市发展背景分析 房地产市场分析 国内成功案例分析 市场机会发现与定位判断
普通话与说话训练 第六章 会话的艺术.
保典配精英 宝剑配英雄 对职业代理人而言,保费固然重要,但更重要的是通过专业金融服务获得源源不断的客户,轻松愉快的长期签单。
提高自身素质做好 新时期班主任工作 北京市广渠门中学 高金英.
关注热点 2014年天猫双十一成交总额 571亿 点亮217个国家地区
普通话模拟测试 与学习平台 使用指南.
第二章 项目一:企业厂区与车间平面设计 1.
網路小說劇情建構與伏線營造 Windows98.
高等职业学校建筑设计类与艺术设计类专业骨干教师实践能力国家级培训
操作系统结构.
没有请柬该如何办 记者如何选取有利位置 着装 准备工作 提问时的注意事项
教育测验的编制.
班级:幼保陆生研修班 姓名:余抒瑾 学号:0A30F358 指导老师:张治遥 老师
企業政策作業-電影魔球分析 姓名:曾怡靜 班級:企三甲 學號:4A0F0094.
做一个智慧快乐的班主任.
关于整合检验检测认证机构实施意见的通知(国办发〔2014〕8号)
3.1能源资源的开发 ——以我国山西省为例.
TCP Session Hijack 郭军权
推进德育创新 做好新时期班主任工作 北京市广渠门中学 高金英.
遠距圖書服務系統 國家圖書館 遠距圖書服務系統 文獻傳遞服務 2002/09
Socket.
基于WinSock的邮件系统 1 设计目标: 1.1 SMTP发送邮件服务器(c语言) 1.2 POP3接受邮件服务器(c语言)
組別:第六組 4A1M0002 蘇琬慈 8A1M0004 林秝鈴 0A30F071 陳蘿佳
公務人員優惠存款制度再改善的 重點介紹 銓敘部退撫司
Advanced Sockets Programming
动态链接库 多线程 文件操作 注册表 多媒体编程 Winsock编程(网络编程) 数据库.
中视前卫OA项目培训 准备人: 李鹏 / 公司: 泛微公司 / 日期: 2017/11/20 中视前卫信息化项目组.
【VA虚拟应用管理平台】专题培训 资源管理及个性化 陕西益和信息技术开发有限责任公司 2011年2月.
第4章 字串及資料的輸入/輸出格式.
关检合作“一单两报” 项目介绍 数据中心 2014年 11月.
2018/12/6 中文Word2000的使用方法.
第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例.
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
第2章 套接字网络编程基础 2.1 UNIX套接字网络编程接口的 产生与发展 2.2 套接字编程的基本概念 2.3 面向连接的套接字编程
Web Server 王宏瑾.
Exploring Socket Programming
Westmont College 网络应用软件 第一讲 (客户-服务器 概念, 协议端口的使用, 套接字API)
Window Socket 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Advister: Quincy Wu Speaker: Chenglin Tsai Date:3/26
计算机组装、维修及 实训教程 第17章 微机软件的安装与设置 2019年4月11日星期四.
_08遍历物理网卡 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
【VA虚拟应用管理平台】专题培训 资源管理及个性化 陕西益和信息技术开发有限责任公司 2011年2月.
DQMClientDim.cxx及双光子练习
保留字與識別字.
面向非连接的 SOCKET编程 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
SOCKET( ).
动态链接库 主讲人:孙鑫
WINDOWS 7 磁盘管理.
实验三 键盘软加锁实验 2019/5/9.
本节内容 重定位表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
1.4WIN32中的宽字符.
科學專題研究 日常飲品pH值的探究.
資料庫應用與實作 一到六章重點、習題.
104 四技二專甄選入學 簡章解析 輔導室 何乙娟.
跑壘訓練與戰術應用 授課講師:林郁捷.
教師檔案系統資料如何填寫? 如何對應教師評鑑共同基準?.
手工编写第一个 MFC程序 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Presentation transcript:

线程同步与异步套接字编程 主讲人:孙鑫 http://www.sunxin.org

事件对象 事件对象也属于内核对象,包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。 有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。 http://www.sunxin.org

关键代码段 关键代码段(临界区)工作在用户方式下。 关键代码段(临界区)是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权。 http://www.sunxin.org

线程死锁 哲学家进餐的问题 线程1拥有了临界区对象A,等待临界区对象B的拥有权,线程2拥有了临界区对象B,等待临界区对象A的拥有权,就造成了死锁。 http://www.sunxin.org

互斥对象、事件对象与关键代码段的比较 互斥对象和事件对象属于内核对象,利用内核对象进行线程同步,速度较慢,但利用互斥对象和事件对象这样的内核对象,可以在多个进程中的各个线程间进行同步。 关键代码段是工作在用户方式下,同步速度较快,但在使用关键代码段时,很容易进入死锁状态,因为在等待进入关键代码段时无法设定超时值。 http://www.sunxin.org

推荐书目 《 Windows核心编程》 机械工业出版社 http://www.sunxin.org

基于消息的异步套接字 Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非阻塞模式下,Winsock函数无论如何都会立即返回。 Windows Sockets为了支持Windows消息驱动机制,使应用程序开发者能够方便地处理网络通信,它对网络事件采用了基于消息的异步存取策略。 Windows Sockets的异步选择函数WSAAsyncSelect()提供了消息机制的网络事件选择,当使用它登记的网络事件发生时,Windows应用程序相应的窗口函数将收到一个消息,消息中指示了发生的网络事件,以及与事件相关的一些信息。

相关函数说明 int WSAEnumProtocols( LPINT lpiProtocols, LPWSAPROTOCOL_INFO lpProtocolBuffer, ILPDWORD lpdwBufferLength ); Win32平台支持多种不同的网络协议,采用Winsock2,就可以编写可直接使用任何一种协议的网络应用程序了。通过WSAEnumProtocols函数可以获得系统中安装的网络协议的相关信息。 lpiProtocols,一个以NULL结尾的协议标识号数组。这个参数是可选的,如果lpiProtocols为NULL,则返回所有可用协议的信息,否则,只返回数组中列出的协议信息。 lpProtocolBuffer,[out],一个用WSAPROTOCOL_INFO结构体填充的缓冲区。 WSAPROTOCOL_INFO结构体用来存放或得到一个指定协议的完整信息。 lpdwBufferLength,[in, out],在输入时,指定传递给WSAEnumProtocols()函数的lpProtocolBuffer缓冲区的长度;在输出时,存有获取所有请求信息需传递给WSAEnumProtocols ()函数的最小缓冲区长度。这个函数不能重复调用,传入的缓冲区必须足够大以便能存放所有的元素。这个规定降低了该函数的复杂度,并且由于一个 机器上装载的协议数目往往是很少的,所以并不会产生问题。

相关函数说明 SOCKET WSASocket( int af, int type, int protocol, LPWSAPROTOCOL_INFO lpProtocolInfo, GROUP g, DWORD dwFlags ); 前三个参数和socket()函数的前三个参数含义一样。 lpProtocolInfo,一个指向WSAPROTOCOL_INFO结构体的指针,该结构定义了所创建的套接字的特性。如果lpProtocolInfo为NULL,则WinSock2 DLL使用前三个参数来决定使用哪一个服务提供者,它选择能够支持规定的地址族、套接字类型和协议值的第一个传输提供者。如果lpProtocolInfo不为NULL,则套接字绑定到与指定的结构WSAPROTOCOL_INFO相关的提供者。 g,保留的。 dwFlags,套接字属性的描述。

相关函数说明 int WSARecvFrom( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr FAR *lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); s,标识套接字的描述符。 lpBuffers,[in, out],一个指向WSABUF结构体的指针。每一个WSABUF结构体包含一个缓冲区的指针和缓冲区的长度。 dwBufferCount, lpBuffers数组中WSABUF结构体的数目。 lpNumberOfBytesRecvd,[out],如果接收操作立即完成,则为一个指向本次调用所接收的字节数的指针。 lpFlags,[in, out],一个指向标志位的指针。 lpFrom,[out],可选指针,指向重叠操作完成后存放源地址的缓冲区。 lpFromlen,[in, out],指向from缓冲区大小的指针,仅当指定了lpFrom才需要。 lpOverlapped,一个指向WSAOVERLAPPED结构体的指针(对于非重叠套接字则忽略)。 lpCompletionRoutine,一个指向接收操作完成时调用的完成例程的指针(对于非重叠套接字则忽略)。

相关函数说明 int WSASendTo( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, const struct sockaddr FAR *lpTo, int iToLen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); s,标识一个套接字(可能已连接)的描述符。 lpBuffers,一个指向WSABUF结构体的指针。每一个WSABUF结构体包含一个缓冲区的指针和缓冲区的长度。 dwBufferCount, lpBuffers数组中WSABUF结构体的数目。 lpNumberOfBytesSent,[out],如果发送操作立即完成,则为一个指向本次调用所发送的字节数的指针。 dwFlags,指示影响操作行为的标志位。 lpTo,可选指针,指向目标套接字的地址。 iToLen,lpTo中地址的长度。 lpOverlapped,一个指向WSAOVERLAPPED结构的指针(对于非重叠套接字则忽略)。 lpCompletionRoutine,一个指向接收操作完成时调用的完成例程的指针(对于非重叠套接字则忽略)。