华北电力大学 网络编程 5--不同IO模式下处理方法.ppt

华北电力大学 网络编程 5--不同IO模式下处理方法.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(2) 在程序进程的主线程中调用 AfxBeginThread(MyCalcFunc,ss); 一旦调用了此函数,线程就被创建,并开始执行线程函数。当数据的计算完成时,函数将停止运行,相应的线程也随即终止。 4.创建工作线程的一般模式 : (1) 构建工作线程控制函数的框架 UINT MyThreadProc(LPVOID PPARAM) { CMyObject * pObject = (CMyObject *) pParam; // 传递参数 if(pObject == NULL ||!pObject-IsKindOf(RUNTIME_CLASS(CMyObject))) return 1; ...... return 0; } (2) 在程序的另一个函数中插入相关代码 ...... pNewObject = new CMyObject; AfxBeginThread(MyThreadProc, pNewObject); 查找N(很大)以内的素数,N的取值很大(比如:10000等),并在主界面实时动态显示处理结果,并显示处理进度等。 从CWinThread类派生出自己的线程类 改造自己的线程类 改造.h头文件(用宏DECLARE_DYNCREATE对该类进行声明) 改造.CPP实现文件(用宏IMPLEMENT_DYNCREATE对该类进行实现) 重载基类(CWinThread类)的某些成员函数 改造自己的线程类 创建新的用户界面窗口类,如窗口、对话框,并添加所需要的用户界面控件,然后建立新建的线程类与这些用户界面窗口类之间的联系。 利用类向导,为新建的线程类添加控件成员变量,添加响应消息的成员函数,为它们编写实现的代码。 经过以上步骤的改造,用户的线程类已经具备了完成用户任务的能力. 创建并启动用户界面线程 要创建并启动用户界面线程,可以使用MFC提供的AfxBeginThread( )函数的另一个版本,其调用格式是: CWinThread * AfxBeginThread( CRuntimeClass * pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTTRIBUTES lpSecurityAttrs = NULL ); 正常终止线程 提前终止线程 先从CWinThread类派生一个类,然后调用AfxBeginThead()创建CWinThread派生类的对象进行初始化,启动线程运行。该实例主要演示文件的移动,并显示操作的进度。 设计到两个线程:文件的读写采用工作线程,进度显示采用用户界面线程。 在程序中,应重点注意,如何编写线程的控制函数,如何创建一个新的线程,线程如何传递参数和取回结果。 select模型 WSAAsyncSelect异步I/O模型 WSAEventSelect事件选择模型 select( )函数 select( )函数原型如下,其中,fd_set数据类型代表着一系列特定套接字的集合。 int select( int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, const struct timeval * timeout ); timeval结构的定义是: struct timeval{ long tv_sec; // 以秒为单位指定等待时间 long tv_usec; // 以毫秒为单位指定等待时间 }; 操作套接字集合的宏 Winsock提供了下列宏操作,专门对fd_set数据类型进行操作 FD_CLR(s, *set) FD_ISSET(s, *set) FD_SET(s, *set) FD_ZERO(*set) select模型的操作步骤 使用FD_ZERO宏,初始化自己感兴趣的每一个fd_set集合。 使用FD_SET宏,将要检查的套接字句柄添加到自己感兴趣的每个fd_set集合中。 调用select( )函数,然后等待。 根据select( )的返回值,便可判断出哪些套接字存在着尚未完成(待决)的I/O操作。 对相应的套接字的I/O进行处理,然后返回步骤(1),继续进行select处理。 从网络上接受数据写入一个文件中。 从网络上接受数据写入一个文件中。 异步I/O模型通过调用WSAAsyncSelect( )函数实

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档