高手指点进程问题!!!

Taken 2001-05-24 09:08:00
各位大虾好*^_^*
小弟初学编程,有几个概念不太明白,望各位指点:
Process与Thread有什么区别?
Application.Handle与程序的hInstance有什么区别?
在VB中调用外部程序的Shell函数返回的pID(MSDN上说是所执行任务的Task ID),这与
上面说的几个概念有什么区别和联系吗?
小弟困惑已久,请多多指教!!!
...全文
128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
x_qiang 2001-06-14
  • 打赏
  • 举报
回复
推荐一本比较好的delphi进程,线程编程方面的书吧!
BigBen 2001-05-24
  • 打赏
  • 举报
回复
进程可说是一个可执行模块,其中包含了许多具体的运行代码,而这些分了块的运行代码就是线程。线程是cpu具体执行的内容,每一个进程必然要含有一个主线程,cpu根据线程的优先级来判断执行的先后顺序以及在这些线程中切换,而进程中的线程的优先级别显然由进程决定。
Taken 2001-05-24
  • 打赏
  • 举报
回复
这个小弟也知道,就是不知道进程与线程有什么区别
BS 2001-05-24
  • 打赏
  • 举报
回复
Process是一个进程Thread是一个线程
airhorse 2001-05-24
  • 打赏
  • 举报
回复
进程里可以有多个线程,也至少有一个线程。
进程某种意义上可以说就是一个application.
rh 2001-05-24
  • 打赏
  • 举报
回复
表3-1 进程函数
函数用途
C r e a t e P r o c e s s ( )创建进程及其主线程。该函数代替Windows 3.11 中使用的Wi n E x e c ( )函数
E x i t P r o c e s s ( )退出当前进程,并终止与此进程有关的所有线程
G e t C u r r e n t P r o c e s s ( )返回当前进程的句柄。但该句柄只能认为是当前进程句柄的副本。真正的
进程句柄是通过调用D u p l i c a t e H a n d l e ( )函数获得的
D u p l i c a t e H a n d l e ( )复制一个内核对象的句柄
G e t C u r r e n t P r o c e s s I D ( )返回当前进程的I D ,它在整个系统中唯一地标识一个进程,直到该进程终

G e t E x i t C o d e P r o c e s s ( )返回指定进程的退出状态
G e t P r i o r i t y C l a s s ( )返回指定进程的优先级类别。它和每个线程的优先级类别共同决定了该线
程的基本优先级
G e t S t a r t u p I n f o ( )返回进程创建时被初始化的T S t a r t u p I n f o 结构的内容
O p e n P r o c e s s ( )返回用进程I D 指定的进程的句柄
S e t P r i o r i t y C l a s s ( )设置进程的优先级类别
Te r m i n a t e P r o c e s s ( )终止一个进程及相关的所有线程
Wa i t F o r I n p u t I d l e ( )等待,直到进程正在等待用户输入
有的Win32 API 函数需要传递应用程序实例的句柄,有的函数需要传递模块的句柄。在1 6 位
Wi n d o w s 中,这两者之间是有区别的。而在Wi n 3 2 环境中则没有区别。每一个进程可以获得它自己的
实例句柄。在Delphi 5 应用程序中可以通过访问一个叫H I n s t a n c e 的全局变量来获取这个句柄。因为
H I n s t a n c e 和应用程序的模块句柄是同一个概念,可以把H I n s t a n c e 传递给那些需要模块句柄的Wi n 3 2
A P I 函数,例如G e t M o d u l e F i l e N a m e ( )函数,它返回一个指定模块的文件名。注意下面的提示,有时
H I n s t a n c e 并不代表当前应用程序的模块句柄。
警告如果一个程序编译成包,那么H I n s t a n c e 并不代表应用程序的模块句柄。此时要用
MainInstance 来访问宿主程序的模块句柄,而HInstance 代表代码所在模块的句柄。
Wi n 3 2 和1 6 位Wi n d o w s 的另一个区别是全局变量H P r e v I n s t 。在1 6 位Wi n d o w s 中,这个变量代表先
前运行的应用程序实例句柄。可以利用这个变量来避免同时运行应用程序的多个实例。Wi n 3 2 中已经
没有这个变量了。每个进程都运行在自己的4 G B 的地址空间中,相互之间不能看到。这样,H P r e v I n s t
变量总是被赋值为0 。必须使用其他方法来避免同时运行应用程序的多个实例,请参见第1 3 章“核心
技术”。
rh 2001-05-24
  • 打赏
  • 举报
回复
进程和线程
可以认为一个进程就是一个正在运行的应用程序或一个应用程序的实例。因此,在Wi n 3 2 环境中
可以同时激活几个进程。每个进程可以为它的代码和数据获得4 G B 的地址空间。在这4 G B 地址空间中,
存在着已分配的内存、线程、文件映射等。另外,由进程调用的动态链接库也在进程的地址空间中。
这章后面的3 . 3 节“Wi n 3 2 内存管理”将详细介绍Wi n 3 2 的内存管理。
进程是惰性的。换句话说,进程本身并不执行任何代码。然而,每个进程拥有一个主线程,由
主线程在进程的环境中执行代码。一个进程可以拥有几个线程;但是,一个进程只能有一个主线
程。
注意线程是一种操作系统对象,代表着一个进程中要被执行的代码的路径。每一个Wi n 3 2 应
用程序至少有一个线程—通常称为主线程或默认线程—但应用程序可以自由地创建其他线
程来执行其他任务。第11 章“编写多线程应用程序”将进一步介绍线程的用法。
当一个进程被创建后,系统就会为它创建一个主线程。如果需要的话,该主线程还可以创建其他
线程。Wi n 3 2 系统把C P U 时间片分配给这些线程。
rh 2001-05-24
  • 打赏
  • 举报
回复
基本就是这样子了
Taken 2001-05-24
  • 打赏
  • 举报
回复
没有更多的解释吗???

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧