手持式移动设备嵌入式WinCE开发(进程)_第1页
手持式移动设备嵌入式WinCE开发(进程)_第2页
手持式移动设备嵌入式WinCE开发(进程)_第3页
手持式移动设备嵌入式WinCE开发(进程)_第4页
手持式移动设备嵌入式WinCE开发(进程)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、手持式移动设备嵌入式手持式移动设备嵌入式wince开发开发6进程进程第章本章目标掌握进程的概念掌握进程的概念熟练掌握进程的创建、终止及其他进程操作函数熟练掌握进程的创建、终止及其他进程操作函数掌握并理解进程间的通信掌握并理解进程间的通信v 进程与程序关系: 联系 程序是构成进程的两个组成部分之一 区别 程序是静态的,进程是动态的 程序可以在长期保存,而进程有它的生命周期,不能长期保存 一个程序可对应多个进程,而一个进程只能对应一个程序。进程进程v 每个应用程序启动后,就会变成一个单独的进程,并且每每个应用程序启动后,就会变成一个单独的进程,并且每个进程都有自己的虚拟内存空间。个进程都有自己的虚

2、拟内存空间。v 操作系统可以列举系统的活动进程,并且可以根据进程句操作系统可以列举系统的活动进程,并且可以根据进程句柄执行柄执行“终止进程终止进程”和和“激活进程激活进程”等操作。等操作。v 每个进程都有自己的虚拟内存空间,因此各进程间相互独每个进程都有自己的虚拟内存空间,因此各进程间相互独立,互不干扰。立,互不干扰。v 在某些情况下,需要在两个或者多个进程间进行通信,所在某些情况下,需要在两个或者多个进程间进行通信,所以我们需要掌握进程间的通信方法。以我们需要掌握进程间的通信方法。进程概述进程概述v 进程进程( process)是指当前所加载程序的专业是指当前所加载程序的专业win32术语,

3、术语,磁盘上的一个可执行文件仅仅是一个文件,它只有在被磁盘上的一个可执行文件仅仅是一个文件,它只有在被启动后才是一个进程。进程仅仅是存在的,它不做任何启动后才是一个进程。进程仅仅是存在的,它不做任何事,一个进程可以有多个线程但至少应包含一个线程,事,一个进程可以有多个线程但至少应包含一个线程,程序中所有的操作都是由线程来完成的。同时每一个进程序中所有的操作都是由线程来完成的。同时每一个进程有且仅有一个主线程,由主线程来进行所有初始化操程有且仅有一个主线程,由主线程来进行所有初始化操作。作。v unix、os/2. windows 2000/nt、windows 95/98以以及及windows

4、 ce系统等都是基于多线程的操作系统系统等都是基于多线程的操作系统v wince的进程与windows nt或windows 2000中的进程有所不同,而最重要的不同点就是:在wince中任意一个时刻晟多可以有32个进程同肘运行。当系统启动时,至少会创建4个进程: nk.exe提供内核服务;filesys.exe提供文件系统服务;gwes.exe提供gui支持;device.exe加载和维护设备驱动程序。 在大多数系统中,系统还将根据需要创建一些进程,例如在ppc2002启动后,除了创建上述的4个核心进程外,同时还会创建6个进程。windows ce进程结构分析进程结构分析v windows

5、ce中,每一个进程由process结构来描述,也就是进程控制块(pcb,process control block);v 系统创建一个进程时,将分配一个新的process结构;进程结束时,这个结构将被回收;v 与 windows 98或nt 进程比较,windows ce进程包含较少的状态信息;v 进程是系统资源分配的基本单位。进程创建进程创建进程创建v 进程的创建可以通过createprocess api函数来完成,该函数的声明如下: bool craateprocess lpcwstr pszimagename, 指向可执行文件名的指针 lpcwstr pszcmdline, 指向执行命令

6、字符串的指针 lpsecurity_attributes psaprocess,指向进程安全属性的指针,ce不支持 lpsecurity_attributes psathread, 指向线程安金属性的指针,ce不支持 b00l finherit,handles, 被创建的进程是否继承创建进程的句柄,ce小支持 dword fc:hrcreate, 创建标志 pvoid pvenvironment, 指向新创建的环境块的指针ce水支持 lpwstr pszcurdir, 指i句当前工作目录的指针,ce不支持 lpstartupinfow psistartlnfo, 指向进程启动信息结构体的指针,

7、ce不支持 lpproce ss工nfdrmatio!q ppro cln fo 指向进程信息结构体的指针 );v 在ce中,createprocess函数中的许多参数是不被支持的,因此很多参数都要被设置成null,所以实际上它可以被看成如下声明: bool createprocess lpcwstr pszimagename, lpcwstr pszcmdline, null, null,null, dword fdwcreate, null, null, null, lpprocess_information pproclnfo 参数pszlmagename表示可执行文件名,任ce中,必须

8、要指定应用程序名,不能设置成null。进程终止v ce小支持nt等所支持的exitprocess函数,但是在ce中,如果主线程终止了,进程也将终止,而不管进程的当前活动状态,因此在ce中可以通过进程的主线程调用exitthread来终止进程。此外,通过调用getexitcodeprocess函数,可以确定进程是否终止。getexitcodeprocess函数的声明如下: bool getexitcodeprocess handle hprocess, lpdword lpexitcode;v 如果要关闭的进程是用户自己创建的进程,则可以使用进程间通信告诉进程终止它自身。除此之外,还有一种终止进

9、程的方法,就是给该进程的主窗口发送wm_close消息。如果上述方法都失败了,则可以使用terminateprocess函数来终止进程。 terminateprocess函数的声明如下: bool terminateprocess ( handle hprocess, dword uexitcode ); 参数hprocess代表要终止进程的句柄。 参数uexitcode指终止进程返回的退出代码。 函数返回true表示成功终止进程,否则终止进程失败。其他进程函数v 1openprocess函数v 函数openprocess用于根据进程id标识返回一个己运行进程的句柄,该函数的声明如下: han

10、dle openprocess( dword fdwaccess, bool flnherit, dword idprocess ); 由于ce不支持fdwaccess参数,因此应将其设置为0,而参数flnherit则必须被设置成false,因为ce不支持句柄继承,参数idprocess指要打开进程的进程id值。openprocess函数的返回值是得到的进程句柄,如果返回值为null,则表示得到进程句柄失败。v getwindowthreadprocessld函数v 函数getwindowthreadprocessld用丁得到创建宙体的进程id值和创建宙体的线程id值,该函数的声明如下: dw

11、ord getwindowthreadprocessld( hwnd hwficl. lpdword lpdwprocessld); 参数hwnd指被创建的窗体句柄。 参数lpdwprocessld为接收创建此窗体的进程id值。 函数的返回值代表创建此窗体的线程id值。 上面讲述的两个雨数,在实际操作中使用得比较少。但是在下而章节中介绍的“进程列举并管理”的例了巾将会用到getwindowthreadprocessld函数,到时读者可以慢慢品味它。v3.readprocessmemory扣writeprocessmemory函数v 除上面介绍的两个函数外,还有两个可以直接读取井写入某个进程的内

12、存空间的函数readprocessmemory和writeprocessmemory。这两个函数的具体声明如1卜_: bool readprocessmemory( handle hprocess, lpcvoid lpeaseaddress, lpvoid lpbuffer, dword nsize, lpdword lpnurnberofbytesread)j bool writeprocessmemory( handle hprocess, lpvoid lpbaseaddress, lpvoid lpbuffer, dword nsize, lpdword lpnumberofbyte

13、swritten ); 参数hprocess指定要操作的进程句柄。 参数lpbaseaddress指定要读取的或写入的进程地址卒间基地址。 参数lpbuffer和参数nsize分别表示竖读取和写入的本地缓冲区和大小。 参数lpnumberofbytesread(lpnumberofbyteswritten)表示实际读取或写入韵字节数。 这两个蛹数在使用时,被读取或写入的整个内存区域必须能够被访问,否则函数将执行失败。 一般柬说这两个函数被更多地应用在程序调试_t作中。v 进程列举并管理”实例v 在编写“进程列举并管理”的例子之前,先让我们来共同熟悉一下它所使用的基本技术。v 1toolhelp

14、v 首先要说明的是tooihelp。tolhelp是ce api的时部分,用于获取操作系统的某些底层信息,尤其是关于当前正在运行的进程以及每个进程下的线程、模块和堆信息。无论是对于普通的程序开发人员还是高级程序员,获取这些信息都是非常必要的。tooihelp api都存储在一个叫toolhelp.dll的动态链接库中,因此在用户使用时,必须先加载此动态库,才可使用其中的api。v 2快照(snapshots)v 接下来要说明的是快照( snapshots)的概念。ce是多任务的,经常需要创建、修改或删除诸如进程、线程、模块、堆等对象。由于系统的各种状态经常处于变动当中,系统信息现在有意义,不代表过一会还有意义。例如想要列举操作系统中所加载的模块,由于操作系统有可能正在动态地调度线程的执行,因此即使已经列举出许多的模块,但是可能还有些模块正在创建和删除。在这样一种动态环境中,为了获取诸如此类的信息,虽好是能够把系统冻结一段时间。尽管65 6cc xctoo

温馨提示

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

评论

0/150

提交评论