易语言模块API视频教程线程启动CreateThread

函数CreateThread

--------------------------------------------------
第二课:CreateThread(线程_启动)
--------------------------------------------------

.版本 2

.DLL命令 CreateThread, 整数型, , "CreateThread", 公开, 线程_启动
.参数 lpThreadAttributes, 整数型
.参数 dwStackSize, 整数型
.参数 lpStartAddress, 子程序指针
.参数 lpParameter, 整数型
.参数 dwCreationFlags, 整数型, , 控制线程创建的标志。如果指定了CREATE_SUSPENDED标志,是创建线程处于暂停状态,并不会运行,直到ResumeThread函数被调用。如果这个值是零,线程创建后立即运行
.参数 lpThreadId, 整数型, 传址

函数说明:

该函数在主线程的基础上创建一个新线程

当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:

  1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回

  2把线程退出码置为STILL_ACTIVE,把线程挂起计数置1

  3分配context结构

  4分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD

  5lpStartAddr和lpvThread值被放在栈顶,使它们成为传送给StartOfThread的参数

  6把context结构的栈指针指向栈顶(第5步)指令指针指向startOfThread函数

第一个参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。是指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL。//线程安全属性

第二个参数表示线程栈空间大小。传入0表示使用默认大小(1MB)。// 堆栈大小

第三个参数表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。// 线程函数

第四个参数是传给线程函数ThreadProc的参数。这样主线程和从属线程就可以共享数据。 //线程参数

第五个参数指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。// 线程创建属性

第六个参数将返回线程的ID号,传入NULL表示不需要返回该线程ID号。// 线程ID

函数返回值:

成功返回新线程的句柄,失败返回0。

封装源码

.版本 2

.程序集 集_线程

.子程序 线程_启动, 整数型, 公开, 成功返回新线程的句柄,失败返回0
.参数 要启动的子程序, 子程序指针, , 要启动的子程序
.参数 要传去子程序的参数, 整数型, 可空, 给子程序传递一个整数型的参数
.参数 线程ID, 整数型, 参考 可空, 提供一个整数型的变量用来存放新创建的线程的线程ID

返回 (CreateThread (0, 0, 要启动的子程序, 要传去子程序的参数, 0, 线程ID))


发布日期:

所属分类: 易语言 标签: