第8章进程与线程
第8章 进程与线程
Win32操作系统平台提供了强大的多任务功能,其中 “进程”( Process)和“线程”( Thread)是其控制多任务的 两个重要概念。早期的 Windows3x只能依靠应用程序之间 的协同来实现协同式多任务,而 Windows95/NT实行的是 抢占式多任务。 在Win32( Windows9/NT中,每一个进程可以同时执 行多个线程,这意味着一个程序可以同时完成多个任务。 对于象通信应用程序那样的既要进行耗时的工作,又要保 持对用户输入响应的应用来说,使用多线程是最佳选择。 当进程使用多个线程时,需要采取适当的措施来保持线程 间的同步
Win32操作系统平台提供了强大的多任务功能,其中 “进程”(Process)和“线程”(Thread)是其控制多任务的 两个重要概念。早期的Windows 3.x只能依靠应用程序之间 的协同来实现协同式多任务,而Windows 95/NT实行的是 抢占式多任务。 在Win 32(Windows 95/NT)中,每一个进程可以同时执 行多个线程,这意味着一个程序可以同时完成多个任务。 对于象通信应用程序那样的既要进行耗时的工作,又要保 持对用户输入响应的应用来说,使用多线程是最佳选择。 当进程使用多个线程时,需要采取适当的措施来保持线程 间的同步
进程与子进程 进程( process是计算机操作系统中的概念。进程可以理解为:程 序在给定的初始状态和内存区域中,能共行执行的一次“计算”, 亦即,进程是可以和其它程序共行执行的,程序的一次执行。进程 有独自的内存空间、程序代码、信息以及一堆大大小小的系统资源。 另外,进程之间也有父子关系,产生进程的进程是“父进程”,被 产生的进程是“子进程”,通常父进程对子进程有控制权,同时子 进程也可以存取父进程的资源
进程与子进程 进程(process)是计算机操作系统中的概念。进程可以理解为:程 序在给定的初始状态和内存区域中,能共行执行的一次“计算”, 亦即,进程是可以和其它程序共行执行的,程序的一次执行。进程 有独自的内存空间、程序代码、信息以及一堆大大小小的系统资源。 另外,进程之间也有父子关系,产生进程的进程是“父进程”,被 产生的进程是“子进程”,通常父进程对子进程有控制权,同时子 进程也可以存取父进程的资源
创建子进程API函数 下面介绍一个很重要的函数,即 Create Process函数,其原型为: BOOL CreateProcess(LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY ATTRIBUTES lp ProcessAttributes LPSECURITY ATTRIBUTES Ip Thread Attributes, BOOL bInherit Handles DWORD dwCreation Flags, LPVOID lpEnvironment, LPCTSTR IpCurrentDirectory, LPSTARTURINFO lpStartupInfo LPPROCESS INFORMATION Ip ProcessInformation Create Process()的功能是建立并执行 child process
创建子进程API函数 下面介绍一个很重要的函数,即CreateProcess函数,其原型为: BOOL CreateProcess(LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTURINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); CreateProcess()的功能是建立并执行child process
其它函数 本节将介绍一些可以协助我们取得 process8关信息的函数。第一组要 介绍的是最重要的 Getcurent Process(GetCurrentProcessld(O,前者会返回 目前正在执行的 process(也就是调用者)的 handle,后者会返回调用者的 id。 Handle和id有什么不同呢?id只是一个数字,Win32保证不会有第 二个在系统中执行的 process有相同的jd,因此,这个数字通常用来鉴 别 process的身份; process handle可就重要了,因为其他与 process关 的函数都需要它来当参数。 HANDLE GetCurrent Process(VOID) DWORD GetCurrentProcessld(VOiD) DWORD Get Priority Class(hANDLE pRocess BOOL SetPriority Class(HANDLE hProcess, DWORD dwPriority Class
其它函数 本节将介绍一些可以协助我们取得process相关信息的函数。第一组要 介绍的是最重要的GetCurentProcess()GetCurrentProcessId(), 前者会返回 目前正在执行的process(也就是调用者)的handle, 后者会返回调用者的 id。Handle和id有什么不同呢?id只是一个数字,Win32保证不会有第 二个在系统中执行的process拥有相同的id, 因此,这个数字通常用来鉴 别process的身份;process handle可就重要了,因为其他与process有关 的函数都需要它来当参数。 l HANDLE GetCurrentProcess(VOID); l DWORD GetCurrentProcessId(VOID); DWORD GetPriorityClass(HANDLE hProcess); BOOL SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass);