网络编程6-多线程 2.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程 郑秋华 zheng_qiuhua@126.com 大纲 多线程简述 线程创建函数和控制函数 互斥和同步机制 临界区 互斥量 事件 信号量 多线程 /morewindows/article/details/7392749 多线程简述 线程是由两个部分组成 线程的内核对象(见:内核对象),操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量。 如果在单进程环境中,多个线程将共享单个地址空间,这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。 线程是抢占式多任务。当系统判定时间已到时, CPU放弃某线程而安排给其他线程。 线程创建函数和控制函数 线程创建有多种方法,如CreateThread,AfxBeginThread,_beginthread和beginthreadex。 CreateThread Windows API函数,提供操作系统级别的创建线程的操作。 Win32的线程使用CreateThread函数来创建,HANDLE?CreateThread(? LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD?dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID?lpParameter,??DWORD?dwCreationFlags,?LPDWORDlpThreadId); 终止线程有下面几种方法: (1)使用TerminateThread函数 (2)使用ExitThread函数 (3)使用return 建议使用Return方法。TerminateThread或ExitThread不能正确的清除线程堆栈。 函数GetThreadTimes通常用来获取线程的运行时间。函数GetCurrentThreadID是获取当前线程的ID。 Sleep指定线程休眠,单位为毫秒。比如,Sleep(1000)将使线程休眠1000毫秒。 函数SwithToThread的功能是切换到其他线程。 SuspendThread用来挂起一个线程。 WaitForSingleObject等待一个指定的线程,直到线程完全完成它的工作。 函数WaitForMultipleObject用来等待多个事件。等待的情形:更改通知、控制台输入、事件、工作、互斥、进程、信号量、线程和可等待定时器。 AfxBeginThread MFC中线程创建的函数。 首先创建相应的CWinThread对象; 然后调用CWinThread::CreateThread,,完成了对线程对象的初始化工作; 然后,调用_beginthreadex (AfxBeginThread相比较更为安全)创建线程. 优点:简化了操作或让线程能够响应消息,即可用于界面线程,也可以用于工作者线程。 线程函数定义为:UINT _yourThreadFun(LPVOID pParam); _beginthreadex _begingthread 这两个函数是MS对C Runtime库的扩展SDK函数。 首先针对C Runtime库做了一些初始化的工作,以保证C Runtime库工作正常.然后,调用CreateThread真正创建线程.仅使用Runtime Library时,可以用_begingthread。 _beginthread uintptr_t _beginthread( void( *start_address )( void * ), unsigned stack_size, void *arglist ); _beginthreadex uintptr_t _beginthreadex( void *security, unsigned stack_size, unsigned ( *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr ); Parameters start_address Start address of a routine that begins execution of a new thread. For _beginthread, the calling convention is either __cdecl or __clrcall; for _beginthreadex, it is either __stdcall or __clrcall. stack_size Stac

文档评论(0)

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

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

1亿VIP精品文档

相关文档