进程与线程

原创 2006年05月21日 14:31:00

进程包括:

1)私有的虚地址空间;

2)可执行程序(代码与数据);

3)打开系统资源列表句柄;

4)安全访问标志;

5)进程ID;

6)至少有一个执行线程;

线程包括:

1)一组CPU寄存器状态;

2)两个堆栈(系统态与用户态);

3)TLS(线程局部存储区);

4)线程ID;

5)安全特性;

因此进程是不活泼的,它从来不执行任何东西,是线程的容器;

线程的分类:1)用户界面线程;2)工作线程;

一般说来一个程序是由一个UI线程和多个work线程组合的,UI线程中进行消息处理(getmessage()),工作线程处理业务逻辑;

线程函数的声明:

DWORD WINAPI TreadFunc(LPVOID);

线程的创建:

HANDLE CreateThread(。。。);

这里需要注意一点线程ID与进程ID一样是可重复使用的,具有一定的不可信性,因此最好操作他们时使用内核对象句柄;

线程的终止:

1)线程函数返回;

2)调用了ExitThread函数;

3)另一个线程调用了TerminateThread()函数;

4)包含线程的进程终止运行;

线程返回后要做的一些事情:

始终将线程设计成这样的形式,即当想要线程终止运行时,它们就能够返回;如果线程能够返回,就可以确保下列事项的实现;

1)线程函数中创建的所有C++对象均将通过它们的析构函数正确撤销;

2)os将正确释放线程堆栈使用的内存;

3)os将线程的退出代码设置为线程函数的返回值;

4)os将递减线程内核对象的使用计数;

ExitThread和TerminateThread函数基本在设计良好的程序中都不使用,原因如下:

ExitThread不能让函数中的C++对象正确的撤销;在ms的VC中可以用VC++运行库中的_endthreadex替代;

TermianteThread

1)他是异步操作,并不能保证想终止的线程已经终止了;

2)线程终止时,DLL通常接受通知,但改函数强迫线程终止,DLL不接收通知,这也能阻止适当的清除;

3)另外在拥有被终止线程的进程结束前,该线程的堆栈不会被释放;

C/C++运行库的考虑

CreateThread与_beginthreadex函数的区别

前者是操作系统的函数,后者是C/C++运行库函数,如果要使用到C/C++运行库中的一些线程不安全函数需要用_beginthreadex函数替代CreateThread函数来创建线程;

进程和线程的句柄和伪句柄

句柄:CreateProcess和CreateThread函数返回值

伪句柄:GetCurrentProcess();GetCurrentThread();

注意将伪句柄传入CloseHandle(..)会忽略并返回false;

将伪句柄转换为实句柄:DuplicateHandle(...)该函数会递增特定对象的使用计数,因此完成后应该对该对象进行释放;

 

相关文章推荐

线程与进程

  • 2015年05月11日 20:08
  • 306KB
  • 下载

线程与进程大全

  • 2016年02月25日 14:45
  • 328KB
  • 下载

同一进程中的线程究竟共享哪些资源

线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。   ...

进程线程区别

  • 2012年12月13日 14:28
  • 190KB
  • 下载

进程线程笔记

  • 2014年09月23日 22:04
  • 12KB
  • 下载

重写 读Win32 平台上用户级进程(其实就是本线程)的各段寄存器的值,并解析其指向的段的信息

; getSegInfo.asm ; 读Win32 平台上用户级进程(其实就是本线程)的各段寄存器的值,并解析其指向的段的信息 ; 是对WOWOCOCK的一个例子程序的改写 include ...
  • jcw2012
  • jcw2012
  • 2012年01月03日 22:55
  • 215

进程与线程详解

  • 2014年03月12日 14:10
  • 617KB
  • 下载

服务器客户端-socket(进程线程)

  • 2015年10月13日 09:04
  • 1.73MB
  • 下载

Java 中的进程与线程

简介: 进程与线程在程序开发中无疑占有极其重要的地位,而 Java 语言为了能提供统一的、与平台无关的关于进程和线程的编程接口,必然要对操作系统提供的相关功能做进一步封装。本文主要介绍 Java 中关...

进程和线程之间的关系

  • 2015年07月05日 17:59
  • 860B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程与线程
举报原因:
原因补充:

(最多只允许输入30个字)