vc++基础教程第11章.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
vc基础教程第11章

第11章 线程间的同步 在 DOS时代DOS并不是一个多任务的环境所以实现多任务。随后有了Windows 3.X,虽然有了多任务的支持但是严格的说对多进程的支持并不够,这主要表现在进程间通信方面提供的支持非常少。一些传统的IPC方式都没有提供。后来在WinNT上完全实现了多进程/多线程支持,当然现在的Windows9X/2K都完全提供了这方面的支持。Process)如进程创建的文件、管道、同步对象等)组成(Thread),一个进程的所有线程共享它的虚拟地址空间、全局变量和操作系统资源。进程是程序的一次执行,线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别: 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。 同一进程中的两段代码不能够同时执行,除非引入线程。 线程是属于进程的,当进程退出时,该进程下的所有线程都会被强制退出并清除。 线程占用的资源要少于进程所占用的资源。 进程和线程都可以有优先级。 在线程系统中进程也是一个线程。可以将进程理解为一个程序的主线程。 对于一个进程来说,当应用程序有几个任务要执行时,建立多个线程是很有用的,之所以有线程这个概念,是因为以线程为调度对象进程效率更高由于创建新进程必须加载代码,而线程要执行的代码已经被映射到进程的地址空间,所以创建、执行线程的速度比进程更快。一个进程的所有线程共享进程的地址空间和全局变量,所以简化了线程之间的通讯。Win32的使用CreateThread函数创建线程,CreateThread的原型如下: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, // creation flags LPDWORD lpThreadId ); lpThreadAttributes,表示创建线程的安全属性,SECURITY_ATTRIBUTES结构的指针,该参数可以忽略,通常为NULL。 第二个参数dwStackSize,指定线程栈的尺寸,为0与进程主线程栈相同。lpStartAddress,指定线程开始运行的地址DWORD WINAPI ThreadProc(LPVOID lpParameter);来定义,其中,这个函数中的参数lpParameter得到的数据就是由调用CreateThread函数中的第四个参数lpParameter传递过来的。 第四个参数lpParameter,表示传递给线程32位的参数dwCreationFlags,用来控制创建的线程的状态,该参数有两个取值: CREATE_SUSPEND 表示此线程创建后挂起,调用ResumeThread继续执行。lpThreadId,用来存放返回的线程ID。线程ID调用了ExitThread函数;线程函数返回:主线程返回导致ExitProcess被调用,其他线程返回导致ExitThread被调用;调用ExitProcess导致进程的所有线程终止;调用TerminateThread终止一个线程;调用TerminateProcess终止一个进程时,导致其所有线程的终止。IDD_DLG_CHAT,名称改为“聊天程序”。 在对话框上添加两个编辑框,一个负责接收数据,另一个负责发送数据,将它们的ID分别设为IDC_EDIT_RECV和IDC_EDIT_SEND,负责接收数据的编辑框设为Multiline属性; 再添加一个IP地址控件负责给出发送的地址,使用默认的ID号IDC_IPADDRESS1; 最后再添加一个按钮用来发送数据,ID号设为IDC_BTN_SEND,在按钮属性对话框的Styles页面上选中Default button复选框,使它成为默认的按钮,其用意是,当用户按下回车键时实际就相当于发送数据,而不必每次都单击发送按钮。对话框编辑结果如图11-00所示。 图11-00 编辑好的对话框资源 步骤3:在应用程序类CEX11_00App的InitInstance函数中初始化套接字库。 在上一章编写Win32控制台程序时讲过,要想在Windows环境中使用套接字,必须首先初始化套接字库来加载网络环境,函数InitInstance中代码如下: BOOL CEX11_00App::InitInstance() { AfxEnableControlContainer(); //初始化套接字库 i

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档