PctGL SERIES  
http://pctgl.cnblogs.com
多线程 APis 的参数。

要进行多线程编程一样离不开对系统 APis 的调用,上面介绍了一些多线程编程的基本 APis,下面将让大家

了解下,这些 APis 的参数,以便我们在进行多线程编程时能够轻而易举的使用他。

  1.创建线程
Private Declare Function CreateThread Lib "kernel32"  _
(lpThreadAttributes   As SECURITY_ATTRIBUTES, _
 ByVal dwStackSize     As Long,  _
 lpStartAddress        As Long,  _
 lpParameter           As Any,   _
 ByVal dwCreationFlags As Long,  _
 lpThreadId As Long)   As Long

这是一个标准的创建线程的 API,可以看到,里面的一些参数似乎用起来比较麻烦,那么我们接下来要改造下

Private Declare Function CreateThread Lib "kernel32"  _
(ByVal lpThreadAttributes As Long, _
 ByVal dwStackSize        As Long, _
 ByVal lpStartAddress     As Long, _
 ByVal lpParameter        As Long, _
 ByVal dwCreationFlags    As Long, _
 lpThreadId               As Long) As Long

好了,现在我们开始了解这些参数。

lpThreadAttributes  表示创建线程的安全属性,NT下有用。

dwStackSize         指定线程栈的尺寸,如果为0则与进程主线程栈相同。

lpStartAddress      指定线程开始运行的地址。

lpParameter         表示传递给某个函数的一个参数

dwCreateFlages 表示是否创建后挂起线程(取值CREATE_SUSPEND),挂起后调用ResumeThread继续执行。

lpThreadId          用来存放返回的线程ID。


每个线程都是一个进程的缩影,他们都有自己独立的栈堆,有自己独立使用的寄存器。

参数中需要特别说明的是 lpStartAddress ,这个参数是新启用线程开始执行的内存地址,这点最重要。

其次,执行函数的参数, CreateThread 只提供一个参数传递给某个函数,所以我们的函数一定也要只做

一个参数(能够符合 StdCall 或者由调用者清除栈堆的语言除外)。


 2.中止线程
Private Declare Function TerminateThread Lib "kernel32"  _
(ByVal hThread As Long, _
 ByVal dwExitCode As Long) As Long

该 APis 我们无需进行参数的修改.

hThread      某个线程的句柄

dwExitCode   基于用户操作的退出码

这种退出线程的方法,我们叫他中止线程,究其原因就是因为,这不是正常的退出方法,相对内部操作起来,这

方法,更麻烦.


  3.退出线程
Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)

这是退出线程的标准方法,可以直接退出某个线程,其中参数
dwExitCode 表示退出码.

相比较
TerminateThread ,此函数不仅实现起来简单,而且其内部操作也更加简明.


  4.线程的优先级
Private Declare Function SetThreadPriority Lib "kernel32"  _
(ByVal hThread As Long, _
 ByVal nPriority As Long) As Long

Private Declare Function GetThreadPriority Lib "kernel32"  _
(ByVal hThread As Long) As Long

参数 hThread 表示某个线程的句柄, nPriority 表示要设置的优先级别

线程有五个线程的优先级水平。在进程的优先级确定之后,可以改变线程的优先级水平。

用 SetPriorityClass 设置进程优先级类,用 SetThreadPriority 设置线程优先级水平。

Normal 级的线程可以被除了 Idle 级以外的任意线程抢占。


  5.挂起/恢复线程

Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long

Private Declare Function SuspendThread Lib "kernel32"  _
(ByVal hThread As Long) As Long

参数 hThread 表示某个线程的句柄.当你启用的线程需要暂停一阵,但需要继续准备并在某个时候继续的时候

ResumeThread 和 SuspendThread 就派上了用场.

posted on 2009-08-06 14:33  PctGL  阅读(302)  评论(0编辑  收藏  举报