- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC进程与线程
热门词汇:
程序 进程 线程 地址空间 虚拟内存 页文件 模块
时间片
程序:是指一系列的计算机指令的集合,以文件的形式存储在磁盘上。
模块:一段可执行程序(包括EXE和DLL),其程序代码、数据、资源被加载到内存中,由系统创建一个数据结构MDB(Module Database)来管理它,这就是一个模块。
进程
概念:是一个程序运行的实例,是一大堆拥有权的集合,其拥有地址空间、文件、动态配置内存、线程和一系列模块。
操作系统以PDB记录其信息。常常被认为是资源申请、调度和独立运行的单位。
由两部分构成:
一:内核对象
二:地址空间(系统赋予每个进程独立的虚拟地址空间,对32位进程来说就是4GB)
线程
概念:主要表达模块中程序代码的“执行事实”,系统已TDB记录线程相关信息。
构成:
一:内核对象
二:线程栈(其大小在CreateThread函数的dwStackSize指定,若为0,则与调用该函数的线程栈一样大小。另:X86的页面大小:4KB。)
线程才是真正的系统调度单位。
MFC中的两种线程:
两个重要函数:
AfxBeginThread与CWinThread::CreateThread(其中封装了_beginthreadex,其不仅仅是对此函数的简单封装,还涉及到许多初始工作,所以MFC中最好不要直接调用CreateThread来创建线程。)
Worker Thread
概念:与界面无关的线程,无消息循环。
创建:AfxBeginThread(函数名,函数参数)
结束:函数运行完毕,或调用AfxEndThread(其中封装了_endthreadex)
UI Thread
概念:其中带有消息循环,就叫做UI Thread。
创建:
1:从CWinThread派生一个自己的线程类,如CMyThread
2:AfxBeginThread(RunTimeClass(CMyThread))
结束:WM_QUIT消息或AfxEndThread
线程同步:
1:Critical Section(关键区域)
2:Semaphore(号志)
3:Event(事件)
4:Mutex(互斥器)
Critical Section
特点:可一可再,至死不休
函数:CRITICAL_SECTION g_CS;
InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
EnterCriticalSection //直到获得拥有权方才返回
LeaveCriticalSection
DeleteCriticalSection
Event
特点:可一不可再,至死不休
注:若要实现线程同步,用自动重置事件,不要用人工重置事件。
函数:HANDLE hEvent;
CreateEvent
WaitForSingleObject(HANDLE,TIME)
ResetEvent //设置无信号
SetEvent //设置有信号
Mutex
特点:可一可再,至死方休
函数:HANDLE hMutex;
CreateMutex
WaitForSingleObject(HANDLE,TIME)
ReleaseMutex
注:CloseHandle函数的使用
其并未释放句柄所指对象,它只是表示我们对该句柄不感兴趣,减少了对象的内核对象计数,才会是相应对象的使用计数减少为0时释放内存,否则在进程结束前,其计数始终达不到0,不能被释放,只有在进程结束时才释放。
可以通过创建命名的互斥器或命名的事件来保证一个程序只有一个实例。(当创建已经存在的互斥器或事件时,返回ERROR_ALREADY_EXISTS可以用GetLastError获得。
线程优先级
SetThreadPriority
THREAD_PRIORITY_TIME_CRITICAL realtime直接变为31其它等级变为15
THREAD_PRIORITY_HIGHEST +2
THREAD_PRIORITY_ABOVE_NORMAL +1
THREAD_PRIORITY_NORMAL 不变
THREAD_PRIORITY_BELOW_NORMAL -1
THREAD_PRIORITY_LOWEST
文档评论(0)