windows多进程编程_第1页
windows多进程编程_第2页
windows多进程编程_第3页
windows多进程编程_第4页
windows多进程编程_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、进程的概念 进程是是一个正在运行的程序的实例(飘),是系统分配资源的单位(线 程是执行的单位 ) ,包括内存,打开的文件、处理机、外设等,进程由两部分组 成: 1、进程的内核对象:即我们通常所讲的 PCB(进程控制块),该结构只能由该 内核访问, 他是操作系统用来管理进程的一个数据结构, 操作系统通过该数据结 构来感知和管理进程; 它的成员负责维护进程的各种信息, 包括进程的状态 (创 建、就绪、运行、睡眠、挂起、僵死等)、消息队列等;同时也是系统用来存放 关于进程的统计信息的地方。 注:具体结构参照 Linux 的 task_struct 数据结构。 2、进程的地址空间:包含所有可执行模

2、块或DLL模块的代码和数据,以及动态 内存分配的空间,如线程堆栈和堆分配的空间。共有 4G, 0-2G 为用户区, 2-4G 为系统区。 二、进程的创建过程 1、系统创建进程内核对象(PCB进程控制块)。 2、 系统为新进程创建虚拟地址空间,帮将可执行文件或任何必要的DLL文件的 代码和数据加载到该进程的地址空间。 3、系统为新进程的主线程创建一个线程内核对象 (TCB线程控制块)。 4、 通过执行C/C+运行期启动代码,该主线程开始运行。注:在Windows环境 下,尽量用多线程而不是多进程。 三、与进程相关的 API 1 、创建进程 BOOL CreateProcess( PCTSTR p

3、sApplicationName, / 可执行文件的名字 PTSTR pszCommandLine, / 命令行字符串 PSECURITY_ATTRIBUTES psaProcess, / 进程对象的安全性 PSECURITY_ATTRIBUTES psaThread, / 线程对象的安全性 句柄可继承性 标识符 ( 优先级 ) 指向环境字符串 子进程当前目录 BOOL bInheritHandles, / DWORD fdwCreate, / PVOID pvEnvironment, / PCTSTR pszCurDir, / PSTARTUPINFO psiStartInfo, PPROC

4、ESS_INFORMATION ppiProcInfo); / 进程线程句柄及 ID 2、打开进程 HANDLE OpenProcess( DWORD dwDesiredAccess, / 访问安全属性 BOOL bInheritHandle, / 继承属性 DWORD hProcessId); / 进程 ID 注:获取 hPronessId 指定的进程的内核对象的句柄 3、终止进程 ( 1 )、主线程的进入点函数返回 ( 2)、进程自己终止自己 VOID ExitProcess( UINT fuExitCode); / 退出代码 (3)、终止自身进程或其他进程 BOOL TerminateP

5、rocess( HANDLE hProcess, / 进程句柄 UINT fuExitCode); / 退出代码 三、与进程相关的API (续) 4、获取进程的可执行文件或 DLL对应的句柄 HMODULE GetModuleHandle( PCTSTR pszModule); / 模块名称 注:当参数传NULL时获取的是进程的地址空间中可执行文件的基地址。 5、获取与指定窗口关联在一起的一个进程和线程标识符 HANDLE GetWindowThreadProcessId( HWND hWnd, / 窗口句柄 LPDWORD lpdwProcessId); / 与该窗口相关的进程 ID 6、获

6、取进程的运行时间 Bool GetProcessTimes( HANDLE hProcess, / 进程句柄 PFILETIME pftCreationTime, / 创建时间 PFILETIME pftExitTime, / 退出时间 PFILETIME pftKernelTime, / 内核时间 PFILETIME pftUserTime); / 用户时间 注:返回的时间适用于某个进程中的所有线程(甚至已经终止运行的线程)。 7、获取当前进程的一个伪句柄 HANDLE GetCurrentProcess(); 注:该函数获取当前进程的伪句柄,通常情况值为-1,只能标识当前进程内核 对象,可

7、以复制,但不可继承。不必调用 CloseHandle() 函数来关闭这个句柄。 8、将进程的伪句柄转换为实句柄 HANDLE DuplicateHandle( GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), 9、获取当前进程 ID DWORD GetCurrentProcessId(); 10、获取进程优先级 DWORD GetPriorityClass( HANDLE hProcess); 11、修改进程的优先级类 BOOL SetPriorityClass( HANDLE hProcess, / 进程句柄 DWO

8、RD fdwPriority); /相对进程优先级 注 1:相对线程优先级 实时: REALTIME_PRIORITY_CLASS 高: HIGH_PRIORITY_CLASS 高于正常 ; ABOVE_NORMAL_PRIORITY_CLASS 正常: NORMAL_PRIORITY_CLASS 低于正常: BELOW_NORMAL_PRIORITY_CLASS 空闲: IDLE_PRIORITY_CLASS 注 2 :只要拥有进程的句柄和足够的权限,就能够修改系统中运行的任何进程 的优先级类。 12、获取进程句柄计数 BOOL GetProcessHandleCount( HANDLE h

9、Process, / 句柄 PDWORD pdwHandleCount); / 句柄计数 13、获取环境块 DWORD GetEnvironmentVariable( LPCTSTR lpName, / 环境变量的名字 LPTSTR lpValue, / 存放返回字符串的缓冲区 DWORD cchValue); / 缓冲区的大小 注:返回值为返回字符串的长度,当缓存不足时返回所需字符串的长度 14、设置环境块 BOOL SetEnvironmentVariable( LPCTSTR lpName, / 环境变量的名字 LPCTSTR lpValue); / 存放变量值字符串的缓冲区 线程的概念

10、 进程是操作系统分配资源的单位,而线程是操作系统调度的单位,进程 是静态的,而线程是活动的。与进程一样,线程由两部分构成。 1 、线程的内核对象(TCB), 个数据结构,操作系统通过它对线程实施 管理,同时也是系统用来存放线程统计信息的地方。 2 、线程堆栈,用于维护线程爱执行代码时需要的所有函数的参数和局 部变量。 与线程相关的 API 1、 创建线程 HANDLE CreateThread( PSECURITY_ATTRIBUTES psa, / 安全属性 DWORD cbStack, / 堆栈大小 PTHREAD_START_POUTINF pfnSatrtAddr, / 函数地址 PV

11、OID pvParam, / DWORD fdwCreate, / PDWORD pdwThreadID); / 2、 终止线程 (1) 、从线程函数返回 (2) 、线程自己终止自己 VOID ExitThread( UINT fuExitCode); / (3) 、终止自身进程或其他进程 BOOL TerminateThread( HANDLE hThread, / UINT fuExitCode); / 3、 获取线程句柄 HANDLE GetCurrentThread(); 4、 查询自己的线程时间 FILETIME GetThreadTimes( HANDLE hThread, / F

12、ILETIME lpCreationTime, / FILETIME lpExitTime, / FILETIME lpKernelTime, / FILETIME lpUserTime); / 函数参数 创建标志 新线程的线程 ID 退出代码 进程句柄 退出代码 线程句柄 装载线程的创建时间 装载线程的中止时间 装载线程花在内核模式上的总时间 装载线程花在用户模式上的总时间 5、 获取线程自身 ID BOOL GetCurrentThreadId(); 6、暂停线程的运行 DWORD SuspendThread( HANDLE hThread); 7、唤醒线程 DWORD ResumeThr

13、ead( HANDLE hThread); 8、使进程睡眠 VOID Sleep( DWORD dwMilliseconds); /睡眠时间 9、获取结构环境 BOOL GetThreadContext( HANDLE hThread, PCONTEXT pContext); 10、获取线程优先级 Int GetThreadPriority( HANDLE hThread); 11、修改刚创建的线程的优先级 线程句柄 相对线程优先级 BOOL SetThreadPriority( HANDLE hThread, / Int nPriority); / 注:相对线程优先级 关键时间: THREA

14、D_PRIORITY_TIME_CRITICAL 最高: THREAD_PRIORITY_HIGHEST 高于正常 ; THREAD_PRIORITY_ABOVE_NORMAL 正常: THREAD_PRIORITY_NORMAL 低于正常: THREAD_PRIORITY_BELOW_NORMAL 最低: THREAD_PRIORIRY_LOWEST 空闲: THREAD_PRIORITY_IDLE 注:使用方法,必须以挂起方式创建线程,修改完毕后唤醒线程 DWORD dwThreadID; HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, NULL, CREATE_SUSPENDED, SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST); ResumeThread(hThread); CloseHandle(hThread); 注:在线程创建函数中没有提供线程优先级的设置,当线程刚刚创建 时,其相对线 程优先级总是设置为正常优

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论