Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90388
  • 博文数量: 27
  • 博客积分: 1090
  • 博客等级: 少尉
  • 技术积分: 355
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-07 10:30
文章分类

全部博文(27)

文章存档

2009年(27)

我的朋友

分类: C/C++

2009-09-08 11:34:04

进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,
是系统进行资源分配和调度的一个独立单位。
线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

1、进程间通信(IPC)
Win32进程间通信的方式主要有:
(1)剪贴板(Clip Board);
(2)动态数据交换(Dynamic Data Exchange);
(3)部件对象模型(Component Object Model);
(4)文件映射(File Mapping);
(5)邮件槽(Mail Slots);
(6)管道(Pipes);
(7)Win32套接字(Socket);
(8)远程过程调用(Remote Procedure Call);
(9)WM_COPYDATA消息(WM_COPYDATA Message)。
2、获取进程信息
BOOL EnumProcesses(
  DWORD *lpidProcess,  // array of process identifiers
  DWORD cb,            // size of array
  DWORD *cbNeeded      // number of bytes returned
);
(1)EnumProcesses()函数可以获取进程的ID,其原型为:
BOOL EnumProcesses(DWORD * lpidProcess, DWORD cb, DWORD*cbNeeded);
参数lpidProcess:一个足够大的DWORD类型的数组,用于存放进程的ID值;
参数cb:存放进程ID值的数组的最大长度,是一个DWORD类型的数据;
参数cbNeeded:指向一个DWORD类型数据的指针,用于返回进程的数目;
函数返回值:如果调用成功,返回TRUE,
同时将所有进程的ID值存放在lpidProcess参数所指向的数组中,
进程个数存放在cbNeeded参数所指向的变量中;
如果调用失败,返回FALSE。
(2)GetModuleFileNameExA()函数可以实现通过进程句柄获取进程文件名

创建进程的函数为CreateProcess
BOOL CreateProcess( 
LPCTSTR lpApplicationName, // 执行程序文件名
LPTSTR lpCommandLine, // 参数行 
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全参数
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程安全参数
BOOL bInheritHandles, // 继承标记
DWord dwCreationFlags, // 创建标记
LPVOID lpEnvironment, // 环境变量
LPCTSTR lpCurrentDirectory, // 运行该子进程的初始目录
LPSTARTUPINFO lpStartupInfo, // 创建该子进程的相关参数 
LPPROCESS_INFORMATION lpProcessInformation // 创建后用于被创建子进程的信息
);

可以用 ReadProcessMemory 和 WriteProcessMemory 来读写子进程的内存空间。

WIN32靠线程的优先级(达到抢占式多任务的目的)及分配给线程的CPU时间来调度线程.

其多线程调度的机制为:
(1)运行一个线程,直到被中断或线程必须等待到某个资源可用;
(2)保存当前执行线程的描述表(上下文);
(3)装入下一执行线程的描述表(上下文);
(4)若存在等待被执行的线程,则重复上述过程。

(1)WaitForSingleObject,用于等待对象的"激活",其函数原型为:
  DWORD WaitForSingleObject(
 HANDLE hHandle, // 等待对象的句柄
 DWORD dwMilliseconds // 等待毫秒数,INFINITE表示无限等待
  );
可以作为WaitForSingleObject第一个参数的对象包括:
Change notification、Console input、Event、Job、
Memory resource notification、Mutex、Process、Semaphore、Thread和Waitable timer。

阅读(911) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Change notification

给主人留下些什么吧!~~